【Unity】多語言版本解決方案

最近在做遊戲的多語言版本,海外版本涉及一個語言翻譯的問題,每個國家有自己的文字,如泰國的泰文,韓國的韓文,台灣的繁體等。

針對這種情況,進行了多語言抽象的處理,方便後期出其它多語言包。

一個 Unity3d 遊戲中,使用中文的地方有以下幾個地方:

  • 代碼中出現中文,比如一些飄字或文字提示等。
  • 配置表中出現的中文,比如道具名字、玩法描述等。
  • 帶有中文字體的圖片資源。
  • Prefab中Text里的中文。

那麼解決多語言版本的首先要解決問題就是,要把遊戲中的所有中文抽取出來,儘可能集中放在一張表中,方便拿給相關人員翻譯。

具體解決思路如下:

1.代碼和配置表的處理方案:

  • 寫一個中文正則工具,把代碼中出現的中文抽取出來,生成Excel表,方便拿給相關人員翻譯。
  • 使用一個有含義字元串替換原來中文,代碼中有一句中文:Tips.ShowMeg("挑戰次數用完,明日再來"),替換 Tips.ShowMsg(Language.GetWord(10001)),其中 Language.GetWord() 是用來根據Id獲取語言包的介面,10001是 Id,這個 Id 是唯一的,根據這個 Id 索引出被翻譯的內容。
  • 做文本替換的時候,需要去重,因為代碼中或配置表中會有很多重複的中文,避免翻譯重複的文本。

2.帶有中文的圖片的處理方案:

把遊戲中所有帶有中文字的圖片找出來,讓美術翻譯好再替換回去。

前期規劃好的話,這個找圖片的工作就不大,比如帶有中文的圖片的命名規範好,如後面帶有 xxx_isfont.png 類似,這樣,那麼做一個小工具,遍歷下資源目錄,可以很方便的把 _isfont 資源找出來,這裡值得注意的是,找出來的資源按原本的目錄結構與命名交給美術同事,翻譯好再替換,這樣處理起來方便,也不會破壞資源依賴。

3.預設中的處理方案:

前期的做法,我把 prefab 的中文全部抽出來,放到配置表中,保存具體 Text 的路徑,然後 prefab 載入完成的時候再重新刷新 Text 組件。但是這會造成性能消耗。解決方案是:翻譯完後直接按照 Text 的路徑設置回去。

  • 把 prefab 的 Text 里的中文抽出來,放到一張 Excel 中,保存 Text 的路徑。
  • 翻譯好後,再重新根據 Text 路徑把翻譯好的文本設上去,保存預設。

以上是遊戲多語言版的解決思路,使用 Python 中的 xlrd 和 lxwt 製作小工具。配置表中替換文本的時候,避免遞歸死循環,代碼和配置表使用Utf-8格式。

推薦閱讀:

懂點理財

最近一些感悟

最好的投資是提升自己的認知

weixin.qq.com/r/TER9Zd7 (二維碼自動識別)

推薦閱讀:

TAG:Unity(遊戲引擎) | 多語言 | 翻譯 |