我正在开发Unity 2D游戏,用户可以在主屏幕上选择一种语言,然后应该用所选语言本身播放后续游戏。特定于语言的更改包括Canvas UI元素上的音频文件,精灵和文本。我该如何解决这个问题?
答案 0 :(得分:1)
这有点依赖。有不同的方法。
我可能会使用嵌套字典和枚举,但可能会有更优雅的解决方案。
假设您在某些枚举中为每个文字,精灵,声音等设置了某个标签,例如
enum TextLabel{
MainPanelTitle,
FireButton,
InfoText,
...
}
enum SpriteLabel{
LanguageFlag,
Background,
...
}
enum SoundLabel{
WelcomeMessage,
NationalHymn,
...
}
对于这种语言,你也会有一个像
这样的枚举enum Language{
English,
French,
German,
...
}
比为
这样的每种语言设置单独的字典// 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>
)
您可以根据语言选择正确的文本/图像/声音字典,为每种类型制作一个主词典:
Dictionary<Language, Dictionary<TextLabel,string>> texts;
再次使用精灵和声音。
在某些时候你必须填写词典。 texts
(sounds
,sprites
)词典很简单,因为它不依赖于外部数据:
texts = new Dictionary<Language, Dictionary<TextLabel,string>>(){
{Language.English, englishTexts},
{Language.French, frenchTexts},
{Language.German, germanTexts},
...
};
好吧,现在你只有&#34;必须以某种方式将信息填入例如文字词典。您可以在脚本中进行硬编码,通过检查器拖动/输入,或者特别是对于文本,例如使用.cvs表并在运行时解析它。该步骤有很多选项,它可能适合另一个问题。最后所有人都会在某些行中恢复,比如
englishTexts[MainPanelTitle] = ...;
englishTexts[FireButton] = ...;
...
frenchTexts[MainPanelTitle] = ...;
...
例如文本词典中填充了您可以访问某些文本的信息(例如法语的InfoText),如
string infotext = texts[Language.French][TextLabel.InfoText];
正如我所说,可能不是最优雅的解决方案,但这就是我将如何做到的;)
答案 1 :(得分:0)
我之前通过这首曲目
Var string Language;
Var UItext Title;
然后创建按钮以选择语言
英文按钮:
Language = “English”;
然后检查用户选择的内容
If (Language == “English”) {
Title = “Title Game” ;
}else if (Language == “Arabic”) {
Title = “عنوان اللعبة" ;
}