发布日期:2024-08-24 05:28 点击次数:105
图片情色 调教
图片
绪论 Unity的多话语腹地化是一个很实用的功能,它可以匡助游戏撑合手多种话语,让不同话语的玩家都大概更好地体验游戏。汉典毕腹地化的决策也有许多种,各个决策之间也各有优劣,背面也会对多个决策进行先容学习。本文就来先容一个专诚作用于多话语腹地化的Unity官方插件:Localization 。这个插件肤浅进行游戏的多话语腹地化,让游戏撑合手多种话语,底下就来望望该插件的使用措施吧! 【Unity 实用器具篇】| 游戏多话语治理决策,官方插件Localization 已毕腹地化及多种话语切换 一、多话语腹地化插件 Localization 1.1 先容Localization是Unity官方推出的腹地化插件,它可以匡助开垦者在Unity时势中已毕多话语撑合手。
在Unity中,Localization的责任旨趣是创建多个表格来存储不同话语的不同字符串。
可以通过Localization Tables创建这些表格,表格可以建造不同资源之间的对应关系,一个key对应多个话语的资源。
性爱画面通过使用Localization插件,开垦者可以肤浅地成立和获取现时话语和现时话语地区,从而为游戏或利用设施提供多种话语的撑合手。
这关于那些需要面向不同地区和不同话语的用户发布游戏或利用设施的开垦者来说瑕瑜常有效的。
1.2 成果展示图片
1.3 使用评释官方文档:官方文档
本文使用的Localization版块为1.4.5,Unity引擎版块为2023.1.9。
后续插件可能会有更新,或者使用老版块的插件时功能使用上可能会有所不同,实质使用时按照我方的版块条目即可。
二、 插件导入并建立 2.1 装置 Localization掀开菜单栏 Window -> Package Manager ,在搜索框中搜索Localization 并进行装置即可。
要提防Packages经受Unity Registry,否则可能搜不到该插件哦。
图片
2.2 全局建立掀开菜单栏 Edit -> Project Settings -> Localization -> Create,找到Localization,点击Create创建,并经受一个文献目次进行文献保存。
图片
点击 Locale Generator 搜索zh和en添加中英文建立,第一次添加时会让咱们经受一个文献夹目次保存。
图片
Locale Generator 用于添加或移出话语,每添加一种话语也会生成对应的建立文献,然后可以修改默许话语为汉文,如下图所示:
图片
三、多话语映射表 3.1 创建多话语文本建立表掀开菜单栏 Window -> Asset Management -> Localization Tables ,点击New Table Collection创建表格。
该表格用于建造不同资源之间的对应关系,一个key对应多个话语的资源,可以经受创建文本表或者资源表。
这里咱们经受文本表(String Table Collection)使用,写好表名后点击Create就可以创建了,然后经受一个旅途目次进行保存。
图片
历程上头几个建立后可以在咱们前边保存文献的旅途下看到讨论的文献,这里最佳是凭据我方的情况经受合乎的文献夹进行管束保存。
图片
3.2 添增加话语文本建立表内容此时在Localization Tables中添增加话语文本即可,建立内容主如果Key和对应多种话语的文本。
可通过Window -> Asset Management -> Localization Tables 掀开该窗口。
图片
实质时势中不一定将多话语内容一皆写在一个建立表中,不同的文本内容也可以通过创建多个建立表进行填写,让不同的模块我方管束文本内容亦然一个可以的经受。
3.3 静态文本此时在场景中添加一个文本组件Text,然后在该组件右侧菜单处点击Localize,会自动添加一个Localize String Event组件。 (这里也可以手动鄙人面添加Localize String Event组件,不外还要手动建立该组件绑定的Text组件,略微繁难一些,功能都是相通的)
图片
此时在该组件中的String Reference参数中经受之前建立的多话语文本建立表中的Key即可完成多话语的建立。
图片
此时运行设施,可以看到该Text组件的文本内容仍是造成咱们建立多话语文本建立表中的Key对应的文本了。
通过Game视图右上角的话语经受可以切换语种,点击切换不同话语后,Game视图中的文本也会即时的随着切换了。
图片
这么咱们的静态文本就可以通过这种措施来添增加话语文本建立表中的Key绑定多话语了。
也可以通过剧本纵脱话语的切换,测试代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Localization; using UnityEngine.Localization.Settings; using UnityEngine.ResourceManagement.AsyncOperations; public class LanguageManager : MonoBehaviour { AsyncOperationHandle m_InitializeOperation; private Locale _chineseLocale; private Locale _englishLocale; void Start() { // SelectedLocaleAsync will ensure that the locales have been initialized and a locale has been selected. m_InitializeOperation = LocalizationSettings.SelectedLocaleAsync; if (m_InitializeOperation.IsDone) { InitializeCompleted(m_InitializeOperation); } else { m_InitializeOperation.Completed += InitializeCompleted; } } void InitializeCompleted(AsyncOperationHandle obj) { var locales = LocalizationSettings.AvailableLocales.Locales; for (int i = 0; i < locales.Count; ++i) { var locale = locales[i]; if (locale.LocaleName == "Chinese (Simplified) (zh)") { _chineseLocale = locale; } else if (locale.LocaleName == "English (en)") { _englishLocale = locale; } } } public void SwitchChinese() { LocalizationSettings.Instance.SetSelectedLocale(_chineseLocale); } public void SwitchEnglish() { LocalizationSettings.Instance.SetSelectedLocale(_englishLocale); } }
将该剧本挂载到场景中,并在场景中添加两个Button分袂绑定切换中英文的措施即可。
图片
上述剧本代码也可以换成下方这种,更纰漏狂暴的措施切换话语。
using UnityEngine; using UnityEngine.Localization.Settings; public class LanguageManager : MonoBehaviour { public void SwitchChinese() { LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[0]; } public void SwitchEnglish() { LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[1]; } }
索引值为Localization 的建立项中的多种话语的规章,如下方第一个话语为汉文则索引为0。
图片
3.2 动态文本除了可以成立静态文本,也可以在代码中获取对应的文本并进算作态成立,底下看一下动态文本的成立措施。
成立动态文本的措施有许多种,可以看情况经受,具体旨趣可以在官方文档仔细查阅,这里就径直写几种措施的使用示例。
1.最纰漏狂暴的措施,径直动态读表赋值。
using UnityEngine; using UnityEngine.Localization.Settings; using UnityEngine.UI; public class TestLocalization : MonoBehaviour { public Text text; void Start() { var loadingResult = LocalizationSettings.StringDatabase.GetTableEntry("UITestTable", "ui_Test"); text.text = loadingResult.Entry.GetLocalizedString(); } }
GetTableEntry() 第一个参数为多话语建立表的名字,第二个参数为该表内部的Key。
通过措施传入多话语建立表的名字及对应多话语的Key即可完成动态文本赋值。
不外要提防的是字符串表可能不会立即可用,举例在腹地化系统运行化时候或尚未加载表时。
为了保障起见,可以确保该多话语建立表被加载出之后再进行赋值,可以来看第二种措施的使用示例。
2.恭候话语建立表运行化之后在赋值。
using System.Collections; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine; using UnityEngine.Localization.Settings; using UnityEngine.UI; public class TestLocalization : MonoBehaviour { public Text text; void Start() { StartCoroutine(LoadStrings()); } IEnumerator LoadStrings() { // A string table may not be immediately available such as during initialization of the localization system or when a table has not been loaded yet. var loadingOperation = LocalizationSettings.StringDatabase.GetTableAsync("UITestTable"); yield return loadingOperation; if (loadingOperation.Status == AsyncOperationStatus.Succeeded) { var stringTable = loadingOperation.Result; text.text = stringTable.GetEntry("ui_Test").GetLocalizedString(); } else { Debug.LogError("Could not load String Table\n" + loadingOperation.OperationException.ToString()); } } }
3.运行化时得回该多话语建立表,事件动态更新文本。
using UnityEngine; using UnityEngine.Localization; using UnityEngine.Localization.Tables; using UnityEngine.UI; public class Demo : MonoBehaviour { public Text Name; private LocalizedStringTable stringTable = new LocalizedStringTable { TableReference = "UITestTable" }; void OnEnable() { stringTable.TableChanged += LoadStrings; } void OnDisable() { stringTable.TableChanged -= LoadStrings; } void LoadStrings(StringTable stringTable) { Name.text = GetLocalizedString(stringTable, "ui_Test"); } static string GetLocalizedString(StringTable table, string entryName) { var entry = table.GetEntry(entryName); return entry.GetLocalizedString(); } }
以上几种措施都可以平方使用,凭据实质需求经受合乎的即可。
四、资源多话语映射表除了上头说到的文本的腹地化除外,Localization 还撑合手资源腹地化,使用措施与建立文本的措施雷同,底下来看一下。
掀开菜单栏 Window -> Asset Management -> Localization Tables ,点击New Table Collection创建表格。
该表格用于建造不同资源之间的对应关系,一个key对应多个话语的资源,这里经受创建一个资源建立表(AssetsTable Collection),写好表名后点击Create就可以创建了,然后经受一个旅途目次进行保存。
图片
创建完之后与文本建立的处理方式相通,在表中添加Key以及资源的内容,测试示举例下:
图片
然后在场景中添加一个Image组件,在右侧菜单点击Localize(或者我方添加组件),经受咱们添加的资源建立表中的Key即可完成。
图片
成果如下,可以使用措施纵脱切换话语,也可以通过右上角进行切换。
图片
五、映射表 导入/导出 Excel 便于管束当时势中的文本量相比多的时候,使用Localization Table的措施会有些难以操作未便于管束。
是以此时可以计议将Localization Table导出为Excel表格对文本进行管束,Localization 是撑合手Table的导入和导出的,底下来看一下若何操作。
5.1 导出Localization Table为CSV掀开Localization Tables,然后右键Localization Table,经受 Export -> CSV...导出。
图片
经受一个文献目次进行保存,就可以看到导出的Excel表格内容了,便是Localization Table中的内容。
图片
5.2 修改Excel中并从头导入在导出的Excel表格中咱们可以进行增改削查的操作对表格进行管束,这么比径直在Localization Table中管束要粗野的多。
图片
修改完之后可以在导入Localization Table中,要提防的是修改完之后要改成UTF-8的编码样貌再保存文献,否则导入之后汉文会泄露乱码。如果不知谈若何径直保存为UTF-8的编码样貌,可以使用Notepad++等器具转一下就可以了。
图片
点击Import -> CSV...经受对应的文献进行导入。
图片
这么就可以看到从Excel中修改后的内容导入到Localization Table中啦。
图片
乱码问题:https://blog.csdn.net/shishuijun/article/details/129961436
六、Build如果需要打包项指标话还需要对Localization Tables进行Build一次,措施也很纰漏,底下看一下若何操作。
掀开菜单栏 Window -> Asset Management -> Addressables -> Groups。
图片
然后在该窗口中经受Build -> New Build -> Defaul Build Script 进行Build,恭候Build完成即可。
图片
转头 Localization 器具的优点在于该插件是Unity引擎原生治理决策,使用时只需要通过Package Manger导入即可。导入及建立都相比纰漏,关于一些文本量不是很大的时势来说,该决策相配的合乎。当时势对文本量需求相配大的时候,就需要互助Excel来管束了。整理来说成果可以,操作纰漏易上手,基本功能都有,是值得学习的一款多话语腹地化治理决策。🎁🎁🎁 临了给全球保举一个功能皆全何况很好用的 IP代理网站:IPIDEA
使用这个代理IP,可以很粗野地探望被顽固的网站,幸免被跟踪和监控,保护我方的狡饰和安全。何况这个代理IP还可以匡助咱们加快网页的加载速率,擢升责任着力。
面前使用这个伙同(https://share.ipidea.net/YYYYYY)注册的新用户还可以径直白嫖最少300M的流量,注册认证后最高可以送7.5G流量哦!
加上最频年终也有算作,优惠力度照旧蛮大的,有需要的小伙伴可以去搞一下试试,注册 == 白嫖。
如果对此相配感趣味趣味之前莫得效过或者不会使用的小伙伴也无谓火暴,在官网都有醒主张教程可以看,背面随机候的话也可以出一期教程匡助全球快速上手使用的哦!
🎬 博客主页:https://xiaoy.blog.csdn.net
🎥 本文由 呆呆敲代码的小Y 原创 🙉
🎄 学习专栏保举:Unity系统学习专栏
🌲 游戏制作专栏保举:游戏制作
🌲Unity实战100例专栏保举:Unity 实战100例 教程
🏅 迎接点赞 👍 储藏 ⭐留言 📝 如有失误敬请指正!
📆 异日很长,值得咱们全力奔赴更好意思好的活命✨
------------------❤️分割线❤️-------------------------
图片
图片
图片
图片
本站仅提供存储办事,悉数内容均由用户发布,如发现存害或侵权内容,请点击举报。