Công cụ Dịch Tự Động cho Unity: Giải pháp Toàn diện để Trải nghiệm Game Đa Ngôn ngữ

Công cụ Dịch Tự Động cho Unity (Unity Auto-Translator) là một giải pháp mã nguồn mở, được thiết kế đặc biệt nhằm loại bỏ rào cản ngôn ngữ trong các trò chơi xây dựng trên nền tảng Unity. Thay vì phụ thuộc vào bản dịch chính thức chậm trễ hoặc không tồn tại, người chơi có thể ngay lập tức chuyển giao diện, đối thoại và văn bản UI sang tiếng Việt — hoặc bất kỳ ngôn ngữ mục tiêu nào — ngay khi trò chơi đang chạy.

Đặc điểm kiến trúc nổi bật

Hệ thống được chia thành ba lớp chức năng độc lập nhưng phối hợp nhịp nhàng:

  • Lớp bắt văn bản (Text Capture Layer): Sử dụng kỹ thuật hooking sâu vào pipeline đồ họa Unity (UGUI, TextMeshPro, Legacy GUI), theo dõi từng thay đổi nội dung văn bản mà không can thiệp vào luồng thực thi gốc.
  • Lớp xử lý dịch (Translation Pipeline): Hỗ trợ nhiều backend dịch qua HTTP — bao gồm Google Translate, DeepL, Bing, Yandex và API tùy chỉnh — với khả năng tự động chuyển đổi giữa các endpoint khi phát hiện lỗi hoặc giới hạn yêu cầu.
  • Lớp thích ứng giao diện (UI Adaptation Engine): Tự động điều chỉnh kích thước phông chữ, độ giãn dòng và chiều rộng khung chứa dựa trên độ dài chuỗi sau dịch, đảm bảo bố cục không bị vỡ dù văn bản tăng tới 40%.

Cách cấu hình cơ bản

Tệp cấu hình chính thường nằm tại BepInEx/config/UnityAutoTranslate.cfg. Một cấu hình mẫu cho trò chơi tiếng Nhật sang tiếng Việt như sau:

[Core]
TargetLanguage = vi-VN
SourceLanguage = ja
Enabled = true

[Engine]
Provider = DeepL
FallbackProvider = Google
MaxBatchSize = 32

[UI]
ResizeElements = true
ScaleFontByLength = 0.95
PreserveLineBreaks = true

[Cache]
UseDiskCache = true
MemoryCacheCapacity = 8192

Chức năng nâng cao

1. Từ điển thay thế thông minh

Tạo tệp Translations/vi-VN/CustomReplacements.txt với định dạng cặp khóa-giá trị:

エリカ=Erica
魔導書= sách phép thuật
戦闘不能= bất tỉnh trong chiến đấu

2. Quy tắc dịch dựa trên biểu thức chính quy

Hệ thống hỗ trợ cú pháp regex có tên nhóm để giữ nguyên định dạng số hoặc ký hiệu:

; Dịch "Lv. 5" → "Cấp 5", giữ nguyên số
r:"Lv\. (\d+)"=Cấp $1

; Dịch "HP: 120/120" → "Máu: 120/120"
r:"HP:\s*(\d+\/\d+)"=Máu: $1

3. Giới hạn phạm vi dịch theo ngữ cảnh

Dùng thẻ #scope để chỉ áp dụng quy tắc cho một phần cụ thể của giao diện:

#scope InventoryPanel
アイテム=đồ vật
#endscope

#scope BattleLog
攻撃=đòn tấn công
#endscope

Tối ưu hiệu năng

Với các trò chơi nặng hoặc thiết bị yếu, có thể kích hoạt các tùy chọn sau trong phần [Performance]:

  • DisableTextureTranslation=true — tắt dịch văn bản nhúng trong texture (ví dụ: ảnh menu).
  • ThrottleIntervalMs=250 — giới hạn tần suất gửi yêu cầu dịch tối đa mỗi 250ms.
  • PreloadStaticDictionary=true — nạp trước từ điển cố định vào bộ nhớ khi khởi động.

So sánh nhà cung cấp dịch

Nhà cung cấp Độ chính xác tiếng Nhật → Việt Giới hạn miễn phí Thời gian phản hồi trung bình
DeepL★★★★☆500.000 ký tự/tháng~320ms
Google Translate★★★☆☆Vô hạn (không đăng nhập)~480ms
Bing Translator★★★☆☆Vô hạn (API key cần đăng ký)~510ms
Yandex.Translate★★☆☆☆1.000.000 ký tự/ngày~620ms

Xử lý sự cố thường gặp

  • Văn bản không xuất hiện bản dịch: Kiểm tra xem TextCaptureHook đã được kích hoạt chưa bằng cách tìm log "Hooked UGUI Text component" trong BepInEx/LogOutput.log.
  • Giao diện bị lệch sau khi dịch: Tắt ResizeElements, sau đó tạo tệp resizer_rules.json để điều chỉnh thủ công từng thành phần theo tên object.
  • Hiệu năng giảm mạnh: Bật chế độ BatchMode và giảm MaxBatchSize xuống 8–16 để cân bằng tốc độ và tài nguyên.

Thẻ: Unity csharp Localization deep-translator bepinex

Đăng vào ngày 30 tháng 6 lúc 14:15