论坛网站html模板,wordpress手机适应,网站群的建设,网站首页模板推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好#xff0c;我是佛系工程师☆恬静的小魔龙☆#xff0c;不定时更新Unity开发技巧#xff0c;觉得有用记得一键三连哦。
一、前言
【GameFramework框架】系列教程目录#xff1a; https://blog.csdn.net/q7… 推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好我是佛系工程师☆恬静的小魔龙☆不定时更新Unity开发技巧觉得有用记得一键三连哦。
一、前言
【GameFramework框架】系列教程目录 https://blog.csdn.net/q764424567/article/details/135831551
二、正文
2-1、介绍
本地化Localization也就是我们所说的不同地区的语言适配比如说中文版“你好”英文版是“Hello”。
GameFramework在本地化方面不仅支持文本的本地化还支持任意资源的本地化比如说游戏中释放烟花的特效也可以做出不同地区的版本使得中文版烟花里面的“新年好”字样的特效在英文版里面是“Happy New Year”字样的特效。
2-2、使用说明
2-2-1、准备语言版本
官方示例项目StarForce里面默认提供了四种语言的版本路径在Assets/GameMain/Localization里面 首先需要将对应的语言写成XML文件格式为一个Key对应一个Value这个格式不能更改因为涉及到后面的语言表的解析。
2-2-2、语言设置
启动流程ProcedureLaunch.cs的OnEnter方法中进行了语言的设置
using GameFramework.Localization;
using System;
using UnityGameFramework.Runtime;
using ProcedureOwner GameFramework.Fsm.IFsmGameFramework.Procedure.IProcedureManager;namespace StarForce
{public class ProcedureLaunch : ProcedureBase{protected override void OnEnter(ProcedureOwner procedureOwner){base.OnEnter(procedureOwner);// 语言配置设置当前使用的语言如果不设置则默认使用操作系统语言InitLanguageSettings();}private void InitLanguageSettings(){if (GameEntry.Base.EditorResourceMode GameEntry.Base.EditorLanguage ! Language.Unspecified){// 编辑器资源模式直接使用 Inspector 上设置的语言return;}Language language GameEntry.Localization.Language;if (GameEntry.Setting.HasSetting(Constant.Setting.Language)){try{string languageString GameEntry.Setting.GetString(Constant.Setting.Language);language (Language)Enum.Parse(typeof(Language), languageString);}catch{}}if (language ! Language.English language ! Language.ChineseSimplified language ! Language.ChineseTraditional language ! Language.Korean){// 若是暂不支持的语言则使用英语language Language.English;GameEntry.Setting.SetString(Constant.Setting.Language, language.ToString());GameEntry.Setting.Save();}GameEntry.Localization.Language language;Log.Info(Init language settings complete, current language is {0}., language.ToString());}}
}这里用到了配置组件SettingComponent获取数据首次进入游戏这个值没有设置会默认使用系统语言。
编辑器模式下直接使用编辑器配置的语言。
2-2-3、语言表加载加入本地化组件
启动流程ProcedureLaunch.cs的LoadDictionary方法中进行了语言表加载
private void LoadDictionary(string dictionaryName)
{string dictionaryAssetName AssetUtility.GetDictionaryAsset(dictionaryName, false);m_LoadedFlag.Add(dictionaryAssetName, false);GameEntry.Localization.ReadData(dictionaryAssetName, this);
}通过语言名称获取加载路径
public static string GetDictionaryAsset(string assetName, bool fromBytes)
{return Utility.Text.Format(Assets/GameMain/Localization/{0}/Dictionaries/{1}.{2}, GameEntry.Localization.Language, assetName, fromBytes ? bytes : xml);
}并读取其中的key-value的键值对保存到本地化Localization组件中。
2-2-4、语言加载
语言加载完成后如下图在UI父类UGuiForm.cs里获取了UI所有的text组件。并将text当前值作为key去获取对应value并将value写入text
protected override void OnInit(object userData)
{base.OnInit(userData);m_CachedCanvas gameObject.GetOrAddComponentCanvas();m_CachedCanvas.overrideSorting true;OriginalDepth m_CachedCanvas.sortingOrder;m_CanvasGroup gameObject.GetOrAddComponentCanvasGroup();RectTransform transform GetComponentRectTransform();transform.anchorMin Vector2.zero;transform.anchorMax Vector2.one;transform.anchoredPosition Vector2.zero;transform.sizeDelta Vector2.zero;gameObject.GetOrAddComponentGraphicRaycaster();Text[] texts GetComponentsInChildrenText(true);for (int i 0; i texts.Length; i){texts[i].font s_MainFont;if (!string.IsNullOrEmpty(texts[i].text)){texts[i].text GameEntry.Localization.GetString(texts[i].text);}}
}文本需要动态赋值也可以使用同样的方式比如判断版本的流程ProcedureCheckVersion.cs的更新游戏应用的时候使用
if (m_VersionInfo.ForceUpdateGame)
{// 需要强制更新游戏应用GameEntry.UI.OpenDialog(new DialogParams{Mode 2,Title GameEntry.Localization.GetString(ForceUpdate.Title),Message GameEntry.Localization.GetString(ForceUpdate.Message),ConfirmText GameEntry.Localization.GetString(ForceUpdate.UpdateButton),OnClickConfirm GotoUpdateApp,CancelText GameEntry.Localization.GetString(ForceUpdate.QuitButton),OnClickCancel delegate (object userData) { UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Quit); },});return;
}2-2-5、游戏中切换语言
在游戏内部更改并保存语言的话会调用SettingForm.cs里面的OnSubmitButtonClick函数在设置完成后停止播放音乐并重启游戏框架
public void OnSubmitButtonClick()
{if (m_SelectedLanguage GameEntry.Localization.Language){Close();return;}GameEntry.Setting.SetString(Constant.Setting.Language, m_SelectedLanguage.ToString());GameEntry.Setting.Save();GameEntry.Sound.StopMusic();UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Restart);
}2-3、实现及代码分析
三、后记
如果觉得本篇文章有用别忘了点个关注关注不迷路持续分享更多Unity干货文章。 你的点赞就是对博主的支持有问题记得留言
博主主页有联系方式。
博主还有跟多宝藏文章等待你的发掘哦
专栏方向简介Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏分享一些制作小游戏的教程。Unity3D从入门到进阶入门从自学Unity中获取灵感总结从零开始学习Unity的路线有C#和Unity的知识。Unity3D之UGUIUGUIUnity的UI系统UGUI全解析从UGUI的基础控件开始讲起然后将UGUI的原理UGUI的使用全面教学。Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。Unity3D之数据集合数据集合数组集合数组、List、字典、堆栈、链表等数据集合知识分享。Unity3D之VR/AR虚拟仿真开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法插件介绍等Unity3D之日常开发日常记录主要是博主日常开发中用到的用到的方法技巧开发思路代码分享等Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中遇到的BUG和坑让后来人可以有些参考。