如何在Unity中为游戏中的不同语言使用不同的资产(音频,精灵和文本)?

时间:2018-02-25 06:28:55

标签: unity3d unity5

我正在开发Unity 2D游戏,用户可以在主屏幕上选择一种语言,然后应该用所选语言本身播放后续游戏。特定于语言的更改包括Canvas UI元素上的音频文件,精灵和文本。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这有点依赖。有不同的方法。

我可能会使用嵌套字典和枚举,但可能会有更优雅的解决方案。

  1. 假设您在某些枚举中为每个文字,精灵,声音等设置了某个标签,例如

    enum TextLabel{
        MainPanelTitle,
        FireButton,
        InfoText,
        ...
    }
    
    enum SpriteLabel{
        LanguageFlag,
        Background,
        ...
    }
    
    enum SoundLabel{
        WelcomeMessage,
        NationalHymn,
        ...
    }
    
  2. 对于这种语言,你也会有一个像

    这样的枚举
    enum Language{
        English,
        French,
        German,
        ...
    }
    
  3. 比为

    这样的每种语言设置单独的字典
    // Maps text labels to English texts
    Dictionary<TextLabel,string> englishTexts;
    
    // Maps text labels to french texts
    Dictionary<TextLabel,string> frenchTexts;
    
    // Maps text labels to German texts
    Dictionary<TextLabel,string> germanTexts;
    
    ...
    

    精灵(Dictionary<SpriteLabel,Sprite>)和声音(Dictionary<SoundLabel, AudioClip>

  4. 相同
  5. 您可以根据语言选择正确的文本/图像/声音字典,为每种类型制作一个主词典:

    Dictionary<Language, Dictionary<TextLabel,string>> texts;
    

    再次使用精灵和声音。

  6. 在某些时候你必须填写词典。 textssoundssprites)词典很简单,因为它不依赖于外部数据:

    texts = new Dictionary<Language, Dictionary<TextLabel,string>>(){
        {Language.English, englishTexts},
        {Language.French, frenchTexts},
        {Language.German, germanTexts},
        ...
    };
    
  7. 好吧,现在你只有&#34;必须以某种方式将信息填入例如文字词典。您可以在脚本中进行硬编码,通过检查器拖动/输入,或者特别是对于文本,例如使用.cvs表并在运行时解析它。该步骤有很多选项,它可能适合另一个问题。最后所有人都会在某些行中恢复,比如

    englishTexts[MainPanelTitle] = ...;
    englishTexts[FireButton] = ...;
    ...
    
    frenchTexts[MainPanelTitle] = ...;
    ...
    
  8. 例如文本词典中填充了您可以访问某些文本的信息(例如法语的InfoText),如

    string infotext = texts[Language.French][TextLabel.InfoText];
    
  9. 正如我所说,可能不是最优雅的解决方案,但这就是我将如何做到的;)

答案 1 :(得分:0)

我之前通过这首曲目

Var string Language;

    Var UItext Title;

然后创建按钮以选择语言

英文按钮:

Language = “English”;

然后检查用户选择的内容

If (Language == “English”) {
Title = “Title Game” ;
}else if (Language == “Arabic”) {
Title = “عنوان اللعبة" ;
}