Oxygen Not Included

Oxygen Not Included

Taiwanese Language Patch
ㄍㄌ 2 Jul, 2021 @ 8:54am
有辦法支援 Linux 嗎
Linux 上可以啟用這個模組,只是標題畫面選單的字全部顯示不出來,想知道技術上有沒有辦法在其他作業系統上實現這個模組的功能?感謝
< >
Showing 1-15 of 50 comments
miZyind  [developer] 4 Jul, 2021 @ 10:59am 
你好!這個問題先前有人在 macOS 也有遇到並回報
當時我有大致找了一下問題,問題出在用 Unity 引擎打包字型檔的步驟
由於小弟平常以 Windows 系統開發為主
沒有足夠時間在 Linux 以及 macOS 系統上各自安裝 Unity 引擎打包字型並交叉測試
只能排除另外兩個系統的支援 QQ

如果能提供打包 + 測試過的字型檔讓我更換,這個問題即可排除了!
字型檔需要用 Unity 引擎的 TextMeshPro 產生,並用 AssetBundle 工具打包
ㄍㄌ 5 Jul, 2021 @ 11:21am 
沒想到是跟 Unity 有關係,我這陣子有空會試著架設 Unity 的開發環境,再提供打包好的字型給你測試,感謝大大!

ㄍㄌ 6 Jul, 2021 @ 12:46am 
我去檢查了一下 player.log,發現這幾行,也許對你除錯會有幫助

[07:42:18.429] [1] [INFO] Loading MOD dll: TraditionalChinese.dll [07:42:18.492] [1] [INFO] [PLibPatches] Candidate version 3.13.4.0 from TraditionalChinese [07:42:18.492] [1] [INFO] [PLib] Mod TraditionalChinese initialized, version 2021.07.05 Desired shader compiler platform 15 is not available in shader blob (Filename: Line: 609) Desired shader compiler platform 15 is not available in shader blob (Filename: Line: 609) ERROR: Shader TextMeshPro/Mobile/Distance Field shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
ㄍㄌ 17 Jul, 2021 @ 6:36am 
我用 CS-469300 版成功編譯 GitHub 上的 v2021.05.09 程式碼,然後用 Unity (2018) 自行編譯了 TextMeshPro 並打包:

https://drive.google.com/file/d/1QhA9TvFNFmBSFPY_0wYgnXH9JRCGjwHG/view?usp=sharing

把本來的 font 替換成自己的內容,但安裝模組後會在:

"Localization.SwapToLocalizedFont"

這個函數遇到錯誤,讓遊戲無法啟動。不確定是不是我打包的某些設定不對,附上錯誤訊息,希望能得到協助。

NullReferenceException: Object reference not set to an instance of an object at TMPro.TextMeshProUGUI.LoadFontAsset () [0x00109] in <6af36a7fefd3402f9ef003b7a9f4c0c6>:0 at TMPro.TMP_Text.set_font (TMPro.TMP_FontAsset value) [0x00016] in <6af36a7fefd3402f9ef003b7a9f4c0c6>:0 at LocText.SwapFont (TMPro.TMP_FontAsset font, System.Boolean isRightToLeft) [0x00000] in <d598de6ac8084f66ab469ae6c7d9fb0f>:0 at Localization.SwapToLocalizedFont (System.String fontname) [0x00062] in <d598de6ac8084f66ab469ae6c7d9fb0f>:0 at miZyind.TraditionalChinese.TraditionalChinesePatches+Localization_Initialize_Patch.Prefix () [0x00064] in <ec19a99e513d4eeeacf36ef72d15feeb>:0 at (wrapper dynamic-method) Localization.Initialize_Patch1() at Global.Awake () [0x001a5] in <d598de6ac8084f66ab469ae6c7d9fb0f>:0 UnityEngine.Object:Internal_InstantiateSingleWithParent_Injected(Object, Transform, Vector3&, Quaternion&) UnityEngine.Object:Internal_InstantiateSingleWithParent(Object, Transform, Vector3, Quaternion) UnityEngine.Object:Instantiate(Object, Vector3, Quaternion, Transform) UnityEngine.Object:Instantiate(GameObject, Vector3, Quaternion, Transform) Util:KInstantiate(GameObject, Vector3, Quaternion, GameObject, String, Boolean, Int32) Util:KInstantiate(GameObject, GameObject, String) LaunchInitializer:Update()
Last edited by ㄍㄌ; 17 Jul, 2021 @ 11:06pm
miZyind  [developer] 18 Jul, 2021 @ 3:56am 
感謝你提供的資訊!
關於 Player.log 的部份,先前有用自己的 macOS 裝置來測試
也是會出現同樣的錯誤訊息,而當時即是根據這個訊息來推斷
我自己打包的這份字體含有其他平台不支援的內容

最近會著手測試看看這份打包好的字體,以及你提到的 SwapToLocalizedFont 問題
miZyind  [developer] 18 Jul, 2021 @ 4:15am 
經剛剛測試,發現這份字體在第一步驟載入時即找不到資源
第一步驟的程式碼:
AssetBundle.LoadFromStream(stream).LoadAsset<TMP_FontAsset>
因此在後續 SwapToLocalizedFont 的步驟會出現 NullReferenceException

請問你打包字體時所取的 Asset 名稱是什麼呢?
在這段程式碼需要把名稱替換成你的 Asset 名稱,才能使字體正確載入:
private const string fn = "NotoSansCJKtc-Regular";
當時我打包時是取名成「NotoSansCJKtc-Regular」

得再麻煩你提供一下 Asset 名稱,才能夠進行進一步測試:steamhappy:
ㄍㄌ 18 Jul, 2021 @ 4:27am 
啊啊,忘記提到這個了,我是參考 https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=2119648603 的做法用粉圓體來打包,字型名稱是 "jf-openhuninn"。

fn 有換成正確的字型名稱,使得

var fontTest = Localization.GetFont(fn); // non-null

會拿到非 null 的值。
Last edited by ㄍㄌ; 18 Jul, 2021 @ 4:27am
ㄍㄌ 18 Jul, 2021 @ 5:56am 
推測可能是因為我用比較新的版本的 TextMesh Pro 產生字型 (Unity 2018 能用的最低版本是 1.4.1):

https://forum.unity.com/threads/null-ref-when-trying-to-use-create-textmeshpro-text.506582/

較舊版本 (1.2.3) 的 TextMesh Pro 似乎無法在 Linux 上執行。如果是因為 TMP 版本的關係,也許就無解了。
古靈精怪 18 Jul, 2021 @ 6:44am 
我當時 TextMesh Pro 用最新版產出字型時
無論怎麼做都是 null exception
後來降版才成功的…

我也沒 Linux 可以幫你....
只能確定 TextMesh Pro 的版本很關鍵 :winter2019sadyul:
ㄍㄌ 18 Jul, 2021 @ 6:54am 
Originally posted by 古靈精怪:
我當時 TextMesh Pro 用最新版產出字型時
無論怎麼做都是 null exception
後來降版才成功的…

我也沒 Linux 可以幫你....
只能確定 TextMesh Pro 的版本很關鍵 :winter2019sadyul:

能否提供打包前的粉圓體資源檔案以便測試?先在此感謝兩位作者耐心解惑 :steamhappy:
古靈精怪 18 Jul, 2021 @ 8:01am 
你是要 .ttf 字型檔,還是 TextMesh Pro 未包成 Assets 的檔案?
ㄍㄌ 18 Jul, 2021 @ 8:46am 
TextMesh Pro 輸出的檔案。我也可以提供我未打包的粉圓體 (雖然沒什麼用 XD)
miZyind  [developer] 18 Jul, 2021 @ 8:47am 
啊啊對!古靈大提到我才想起來
當時我打包字體,在 Windows 也有遇到一樣問題
所以才會在 GitHub README[i.imgur.com] 的部份
加註 Unity 的版本以及 TMP 版本
因為只有這個版本我有把字體包成功

不確定在 Linux 以及 macOS 上能否找到同樣的版本
如果古靈大的加載器以及字體都能在這兩個平台正常運作的話
這問題應該就有解了!(手邊目前沒這麼多裝置能測試...
古靈精怪 18 Jul, 2021 @ 9:37am 
字型 assest 暫時上傳這 FontAsset [github.com]
裡面有「粉圓體」和「NotoSansCJKtc-Regular」

後來採用粉圓體的原因是
個人覺得整體上在閱讀時比較舒服
你可以都試試看
ㄍㄌ 18 Jul, 2021 @ 11:10am 
用古靈精怪提供的兩個 assets 初步嘗試的結果:遊戲可以正常執行,但字型還是無法顯示
看起來跟 Player Settings 裡 Graphic API 有關 (更改後要重開才會生效,Unity 標題列會顯示目前使用的是哪一個):
選擇 Vulkan 編譯,文字透明,跟先前一樣
選擇 OpenGLCore 編譯,文字變成黑色長方形,Player.log 裡的錯誤訊息是 OpenGL Error:Invalid texture unit!

https://i.imgur.com/ch5orwD.jpg

Linux 下只有這兩個可以選,也許 WIndows 下能用的配置 Linux 剛好都用不了吧
Last edited by ㄍㄌ; 18 Jul, 2021 @ 12:11pm
< >
Showing 1-15 of 50 comments
Per page: 1530 50