unity · tutorial · engine
Cách dịch game Unity sang tiếng Anh
Dịch game Unity bằng RuneTranslate: đọc TextAsset, trường MonoBehaviour (Mono và IL2CPP) và StreamingAssets, văn bản nào nó với tới được (kể cả văn bản C# đã biên dịch trên Mono), và cách bộ bảo vệ định danh giúp bạn không làm hỏng game.
Unity là engine đứng sau một phần ngày càng lớn các game indie và visual novel Nhật, và cũng là engine khó dịch nhất trong số các engine phổ biến, vì Unity không có định dạng văn bản duy nhất. Hội thoại có thể nằm trong các khối TextAsset, trong trường chuỗi của MonoBehaviour, trong script StreamingAssets rời, hoặc được biên dịch thẳng vào một DLL C#. Hướng dẫn này đi qua việc dịch một game Unity bằng RuneTranslate và, quan trọng không kém, giải thích quy tắc khiến Unity khác biệt: nơi văn bản nằm quyết định thứ có thể với tới.
Lưu ý lớn trước hết: văn bản nằm ở đâu
RuneTranslate dịch văn bản Unity nằm trong dữ liệu: các file asset mà engine nạp lúc chạy, gồm cả các trường chuỗi trên component MonoBehaviour (hội thoại, tên, nhãn). Nó đọc các trường đó trên cả bản dựng Mono lẫn IL2CPP: cấu trúc kiểu lấy từ các DLL của chính game trên Mono, hoặc được dựng lại từ metadata IL2CPP khi không có thư mục Managed/. Trên bản dựng Mono, nó còn đọc cả chuỗi literal biên dịch trong mã C# của game (Assembly-CSharp.dll) và bỏ qua những chuỗi mã dùng làm tên hay khóa. Thứ nó không với tới được là văn bản biên dịch vào mã native của bản dựng IL2CPP (GameAssembly.dll). Trên thực tế, những game giữ script trong asset và component sẽ dịch tốt, và bước đầu tiên là mở dự án sẽ cho bạn biết mình đang có gì.
Bạn cần gì
- RuneTranslate cho Windows hoặc Linux: miễn phí, mở khóa mọi engine và mọi nhà cung cấp trừ RuneLingua.
- Một thư mục game Unity: thư mục có file
.execủa game và thư mục<GameName>_Data/(chứaglobalgamemanagers,resources.assets,data.unity3dvà các filelevel*). - Một ngôn ngữ đích: tiếng Anh, Tây Ban Nha, Pháp, Đức, Bồ Đào Nha, Nga, Trung, Ý, Thổ Nhĩ Kỳ, Việt và hơn 20 ngôn ngữ nữa.
- Một nhà cung cấp dịch. Google Translate miễn phí dùng được ngay; DeepL có bậc miễn phí; OpenAI, Anthropic, mô hình cục bộ và mọi API tương thích OpenAI đều dùng khóa của bạn.
Bước 1: Mở thư mục game
Mở RuneTranslate, bấm Dự án mới, rồi trỏ tới thư mục game Unity. Việc phát hiện engine tìm thư mục _Data/ và nhận ra dự án là Unity. Bộ đọc Unity tích hợp sẵn của RuneTranslate (là một phần của chính ứng dụng, không cần cài thêm gì) mở các file asset và liệt kê các chuỗi đọc được vào một không gian làm việc riêng của dự án trong bộ đệm game của ứng dụng (mặc định là %APPDATA%/RuneTranslate/unity-workspace/<projectId>/ trên Windows; Cài đặt > Ứng dụng > Bộ đệm game có thể chuyển nó đi). Thư mục game gốc của bạn không bao giờ bị chỉnh sửa. Hãy kiểm tra bản dựng đã xuất có chạy được trước khi chia sẻ.
Bước 2: Chuỗi được trích xuất thế nào
RuneTranslate đọc văn bản từ mọi nơi Unity tách văn bản ra ngoài:
- TextAssets: các khối JSON / CSV / script nhúng trong
.assetsvà AssetBundle, được cắt bằng bộ trích xuất nhận biết định dạng. - Trường chuỗi MonoBehaviour: văn bản hiển thị trên component (hội thoại, tên, nhãn), trên cả bản dựng Mono và IL2CPP (thông tin kiểu lấy từ DLL của game, hoặc dựng lại từ metadata IL2CPP).
- StreamingAssets: các file script rời được duyệt thẳng trên đĩa (
.json,.txt,.csv,.tsv,.xml,.yaml,.ksvà hơn thế nữa). - Bundle Addressable đóng gói: những game phát hành bundle Addressable ở dạng đóng gói được đọc tự động, nên văn bản của chúng được trích xuất như mọi bundle khác.
Unity cũng là nơi dịch quá tay gây hại nhiều nhất, nên RuneTranslate có sẵn một bộ bảo vệ cho việc này. Nhiều chuỗi MonoBehaviour hoàn toàn không phải văn bản hiển thị: chúng là định danh điều khiển và toán hạng luồng, như tên cảnh mà lệnh gọi LoadScene tra theo chuỗi, khóa định tuyến thông điệp, tên animator / clip âm thanh, tên bộ phận Live2D, và các giá trị so sánh bên trong logic If / SetVariable của Fungus (ví dụ một cờ như 村落出口). Dịch những thứ đó và game hỏng trong im lặng; triệu chứng kinh điển là màn hình “đang tải” vô tận mà không có lỗi nào. RuneTranslate tự phân loại chúng là bị loại trừ (hiện màu đỏ, chỉ chọn tham gia), nên trình chỉnh sửa hiển thị hội thoại và nhãn thật và để yên phần bộ máy. Các phép thay {$var} của Fungus và mã đánh dấu {color=...} / TMP <...> được che sau placeholder để chúng sống sót qua lượt dịch nguyên vẹn.
Bước 3: Dịch và xem lại
Chọn nhà cung cấp và chạy. DeepL hoặc một LLM đọc hay nhất cho hội thoại; Google Translate miễn phí lo menu và tên vật phẩm. Hãy lập bảng thuật ngữ cho dàn nhân vật và thuật ngữ lặp lại trước, xem Bảng thuật ngữ 101. Mỗi dòng nằm trong trình chỉnh sửa cạnh văn bản gốc; sửa trực tiếp (lưu khi rời ô hoặc Ctrl+Enter), và chạy bộ tinh chỉnh AI tùy chọn để đọc soát lượt hai. Gói Miễn phí chạy với giới hạn tốc độ nhẹ (chậm hơn khoảng 2 lần với nhà cung cấp AI, ít hơn với nhà cung cấp miễn phí): cùng engine, cùng chất lượng đầu ra; gói trả phí chỉ chạy ở tốc độ tối đa.
Bước 4: Xuất bản dựng chơi được
Bấm Xuất. RuneTranslate sao chép game, rồi vá các chuỗi đã dịch ngược vào file asset tại chỗ. Cùng bộ bảo vệ loại trừ đó chạy khi ghi lại, nên một dự án cũ không thể vô tình đẩy một tên cảnh hay toán hạng luồng đã dịch khi xuất lại. Kết quả là một bản sao game đầy đủ, chạy được, ở nơi bạn chọn: mở file .exe và nó chạy bằng ngôn ngữ đích của bạn.
Dịch sang ngôn ngữ non-Latin (Trung, Nhật, Hàn, Thái, Ả Rập) mà phông chữ tích hợp của game không hiển thị được ký tự? Khi xuất, RuneTranslate chèn một phông dự phòng vào chuỗi phông TextMeshPro, để văn bản đã dịch hiện ra thay cho các ô thiếu ký tự.
Giới hạn đã biết
- Văn bản biên dịch vào mã native của bản dựng IL2CPP (
GameAssembly.dll) không được dịch. Trên bản dựng Mono, chuỗi literal trongAssembly-CSharp.dllthì được, trừ những chuỗi mã dùng làm tên hay khóa, còn các trường dữ liệu của MonoBehaviour được đọc trên cả bản dựng Mono và IL2CPP. - Đọc MonoBehaviour trên IL2CPP cần một
global-metadata.datphân tích được; metadata bị làm rối nặng có thể không dựng lại được (cố gắng hết sức). - Hãy xác nhận game đã xuất chạy và đọc đúng trước khi chia sẻ.
- Chữ trong ảnh (logo, giao diện vẽ tay, chú thích CG) không được dịch: Studio ảnh không mở được texture Unity.
Vì sao cách này dễ hơn cách cũ
Dịch Unity thủ công nghĩa là giải nén asset bằng UABE hoặc AssetStudio, lần tìm TextAsset và trường MonoBehaviour nào chứa văn bản thật, tự tay tránh các chuỗi định danh làm game sập, rồi nhập lại mà không làm hỏng bảng asset. RuneTranslate gói trích xuất, phân loại (để bạn không dịch phần bộ máy), dịch và vá tại chỗ vào vài cú bấm, trong khi vẫn mở trình chỉnh sửa để bạn kiểm soát câu chữ.
Xem trang engine Unity để biết danh sách tính năng đầy đủ, đọc hướng dẫn TyranoBuilder cho một engine dựa trên HTML, hoặc tải RuneTranslate và thử trên một game thật.
Bài liên quan
Sẵn sàng thử RuneTranslate?
Gói miễn phí mở khóa mọi engine và mọi nhà cung cấp dịch trừ RuneLingua. Supporter ($3.99/tháng) mở khóa tốc độ tối đa.
Tải cho Windows & Linux
