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" trongBepInEx/LogOutput.log. - Giao diện bị lệch sau khi dịch: Tắt
ResizeElements, sau đó tạo tệpresizer_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ế độ
BatchModevà giảmMaxBatchSizexuống 8–16 để cân bằng tốc độ và tài nguyên.