【RM教學 2.0】有關MV中常出現的字體問題

【RM教學 2.0】有關MV中常出現的字體問題
在遊戲輸出後,是否常出現遊戲中字體突然歪了,或是缺字等等的意外狀況,這篇文章簡單描述MV有關字體的運作,以及對應的解決方法。
我們先來個實例,圖片取自巴哈中的遊戲
【遊戲發布】劇情向傳統RPG-魔界
討論串連結:
https://forum.gamer.com.tw/C.php?bsn=4918&snA=29091&tnum=2
先不管這張圖片文字的原意是什麼,但可以看到其中有個字體跟其他字體是完全不同的。
由作者在推文的回應,也可以看出這是作者預料之外的事情。
那個,問題出在哪呢?
如果對腳本比較不了解,各位也可以直接拉到底下一點看解決方法,如果想了解腳本的作者,可以跟我一起一步一步往下看
內建腳本的字體選擇部分
這邊先給大家一個概念,內建的文字顯示大部分都是包在Window這個物件底下,
打開rpg_window.js 可以看到這一段
standardFontFace,代表著遊戲中的字體顯示
如果有寫過網頁的朋友不難看出 SimHei Heiti TC , sans-serif是CSS中的設計方式,
而這個function 判斷了三中狀況
如果是中文語系採用 “SimHei, Heiti TC , sans-serif” 的字體,如果是韓國語系則是另外一種,
在兩者皆非的狀況下則採用GameFont字體
那腳本中的 $gameSystem.isChinese() 又是如何判斷?
打開rpg_object.js 可以查到GameSystem.js 有幾個function
而它們都是透過 $dataSystem.locale 的 regExp去判斷為什麼語系。
別擔心,異世界的語言就快結束了,我們繼續往下追
打開data/System.json這個檔案,可以搜尋到 locale這個關鍵字
可以看到 “locale”:”zh_TW” 的字樣,這個資料是在我們”開啟新專案”時,就會根據開啟的語系產生的資料,
所以大部分中文的作者的遊戲都會採用 SimHei, Heiti TC , sans-serif 的字體樣式來顯示文字
依照CSS的特性,我們會先嘗試抓取玩家的電腦中是否有SimHei字體,若沒有則判斷是否有Heiti TC字體,由左而右進行檢查。
也因此,才會出現字體不統一的情形。 (尤其中文字的字量非常大,常常會看到可能大部分的字體沒問題,少部分字體卻會缺字)
我在網路上找過改字體教學,但為什麼沒用?
網路上大部分的教學都會教你到font/ 資料夾底下去改字體,很多作者照做之後卻發現還是有這個問題,那是為什麼?
打開fonts/gamefont.css 檔案觀察一下
可以發現,其實我們丟到fonts資料夾中的字體檔案,只改變了GameFont定義的字體但在Window的判斷中,
並沒有去改變 $gameSystem.isChinese() 時套用的字體。
這樣,我們得到了一個結論:
遊戲中的字體會根據System.json中的loacle值改變,而且會由左至右套用。在某些字體缺字的時候,會發生字體不同的問題
那該如何解決? 這邊提供幾種方式:
@ 上網找可以完全改善字體的腳本:
這個部分就不多做解釋,如果有讀者願意提供不錯的腳本也歡迎留言
@ 找出完全支援中文的字體,手動修改讀取字體
1. 先找出你想要用且支援中文的字體 EX: google可以提供的字體 https://www.google.com/get/noto/#sans-hant
#請詳閱各字體的使用規範
2. 修改gamefont.css的字體連結名稱
請注意內建只支援ttf / otf 類型的字體檔案
3. 修改rpg_window.js 中的standardFontSize如下圖
讓所有語系都是return Game_Font (你安裝的子體)
這樣字體就都統一成Game_Font,英文/中文字基本上都不會有問題了
(因為英文只有26字母,多數字體都支援英文,比較不會出現缺字的狀況。)
最後,想特別說明。這篇主要是簡單讓大家理解RM中字體顯示的判斷方式,還有很多方法都可以讓字體達到統一。文章中有觀念錯誤的地方也歡迎給予指教修正。