遊戲開發日誌 #02


在上一編的 Localization 內容,有人私訊問題,關於 dataSystem.text.en 取得系統相關的英語文字的事項,如果有十幾種語言,那不同類型文字的程序都要去編寫嗎?

像以下這樣:
string GetSystemText(int textID) {
        DataSystem ds = Array.Find(dataSystems, s => s.textID == textID);
        switch (localizationIndex) {
            case 1:
                return ds.text.en;

            case 2:
                return ds.text.jp;

            case 3:
                return ds.text.cht;

            case 4:
                return ds.text.chs;

            default:
                return ds.text.en;
        }

string GetItemText(int textID) {
  .
  .
  .
如果是上面這樣做的話,的確要為每個種類的取得文字 function 去設定重覆的步驟。其實只要做一次就足夠,不用這大廢周張。



以下是本人的做法:
//Localization.cs
int localizationIndex=1;  //current language
DataSystem[] dataSystem;
DataItem[] dataItem;
DataNarrative[] dataNarrative;

public string GetSystemText(int textID)
{
    DataSystem ds = Array.Find(dataSystems, s => s.textID == textID);
    return ds.text.GetCurrentText(LocalizationIndex);
}

public string GetDataItem(int textID)
{
    DataItem di = Array.Find(dataItem, i => i.textID == textID);
    return di.text.GetCurrentText(LocalizationIndex);
}

public string GetDataNarrative(int textID)
{
    DataNarrative dn = Array.Find(dataNarrative, n => n.textID == textID);
    return dn.text.GetCurrentText(LocalizationIndex);
}


//DataSystem.cs
public class DataSystem
{
    public string type;
    public int textID;
    public LocalizedText text;
}


//LocalizedText.cs
public class LocalizedText
{
    public string en;
    public string jp;
    public string cht;
    public string chs;

    public string GetCurrentText(int localizationIndex)
    {
        switch (localizationIndex)
        {
            case 1:
                return this.en;

            case 2:

                return this.jp;

            case 3:

                return this.cht;

            case 4:

                return this.chs;

            default:

                return this.en;
        }
    }
}

只要在 Localized Text 中加入一個 GetCurrentText(int localizationIndex) 的 function,就可以直接取得現在語言的文字,要加減語言的話,只要更改這裡就可以,非常方便。

這就是我愛死 custom class 的原因,在知道這東西前真的很頭痛。。。
發佈留言

此網誌的熱門文章

遊戲開發日誌 #03

如何練習繪畫角色 (How to practice drawing character) Part 1

遊戲開發日誌 #01