本地化框架问题记录&如何使用
未开启定位服务,位置权限或附近没有其他玩家
未开启位置权限或附近没有其他玩家
目前游戏内需要本地化的音频类型有两种:1.引导 2.角色旁白
但是他们播放的方式却不相同
音频资源配置在数据表里 局内动态加载音频资源进行播放(IngameNewbieDirection.csv)
处理方式:
统一接口 支持多种方式传参 也是以后播放语言音频的接口
脚本持有音频资源引用进行播放
处理方式:
挂载本地化组件 代码获取本地化组件下面的key去播放(IsAutoPlay选项要勾掉)
音频资源持有在角色动作事件上面 通过触发事件的方式进行播放
处理方式:
通过音频名字去播放音频(需要手动填写)
音频资源配置在空的Prefab上面 通过角色挂件的方式 持有在数据表里 动态加载播放(IngameEmotion)
处理方式:
挂载本地化组件(默认勾选IsAutoPlay) 并且把AudioSource组件PlayOnAwake属性取消勾选
TextKey:文本key
IsUpdateValue:控制本地化组件是否生效(多用于动态文本)(不影响字体)
编辑器按钮:
切换中文(英文,泰文等):在有相关翻译的情况下 辅助查看文本是否超框等(编辑完一定要切换到中文)
生成文本key:随机一个文本key且不会跟文本表key值冲突
添加key到文本表:把当前key及对应文本添加到文本表(key必须符合规范才可添加)(多用于嵌套预设)
更新文本表文本:更新文本表当前key值对应的文本
生成文本key并且添加到文本表:字面意思 一键操作且自动分割单张文本表
AudioClip:当前本地化的音频(需要手动拖拽赋值)
LoadPathKey:默认音频名字(自动识别当前音频无需手动填写)
IsAutoPlay:是否自动播放音频(默认自动播放)(去掉勾选多用于脚本获取当前组件 通过key去播放)
LoadPathKey:默认图片名字(自动识别当前图片无需手动填写)
LoadPathKey:默认图片名字(自动识别当前图片无需手动填写)
LoadPathKey:默认材质球贴图名字(自动识别当前贴图无需手动填写)
Index:需要本地化的材质球Index(可能有多个材质球 默认第一个材质球)
LoadPathKey:默认图片名字(自动识别当前图片无需手动填写)
LoadPathKey:默认材质球贴图名字(自动识别当前贴图无需手动填写)
LoadPathKeys:默认图片名字(自动识别当前元素无需手动填写)
刷新:当有元素变更时需要手动刷新一下(可优化)
默认常用功能向展开状态 一共7个功能块
导出图片:配置路径即可导出目录下所有图片(导出位置自己选择)
导出音频:配置路径即可导出目录下所有音频(导出位置自己选择)
导出预制体Text文本:导出目录下所有预制体UIText组件文本
导出场景Text文本:导出场景下所有UIText组件文本
导出数据表文本:导出所有数据表文本
导出数据表&动态文本:导出数据表+动态文本表文本
一键导出预制体,场景,数据表,动态文本:导出预制体UIText+场景UIText+数据表+动态文本表文本
导出预制体文本并且添加本地化组件
导出场景文本并且添加本地化组件
一键导出预制体,场景,数据表文本并且添加本地化组件
添加预制体文本本地化组件
添加场景文本本地化组件
添加场景&预制体文本本地化组件
一键添加本地化组件并且更新数据表
1.全局查找属性变更的嵌套Prefab:查找跟源预设不一样的嵌套预设
输出:PreabPropertyModifications.csv
2.全局查找预设上挂载脚本公开出来的string字段
输出:预设上脚本字段中文文本.csv
3.全局查找含有中文文本的脚本
输出:脚本上有中文的文本.csv
4.全局查找脚本内的Format字段
输出:脚本上有XXFormat字段文本.csv
5.全局查找挂载多个LocalizedText组件的预设对象
6.全局查找挂载多个LocalizedText组件的场景对象
7.删除文本总表里预制体文本上没有用到的key
8.删除文本总表里场景文本上没有用到的key
9.删除文本总表里预制体和场景文本上没有用到的key
10.根据规则动态翻译一些文本:主要是DropItemTable表文本
现有规则:
主要是限时道具文本
当有多种语言的时候需要代码里手动添加相对应的限时翻译
1.从文本表生成未翻译文本表:从文本表生成没有被翻译的文本表(输出:NoMatchText.csv)
2.从未翻译的文本表里提取需要翻译的文本:默认一份不翻译的文本(不翻译文本.csv)(输出:需要翻译文本)
3.往中英文字典表里添加新的翻译词汇(新翻译词汇表:新增已经翻译文本.csv)
4.从文本表里往英语翻译字典表里添加新的词汇
5.刷新中英文字典表翻译(重新翻译的文本表:重新翻译的文本.csv)
6.更新数据表文本(含动态文本):重新生成文本表数据表文本
7.更新动态文本:重新生成文本表动态文本
8.更新翻译变更文本
9.生成单个语言文本表:从文本总表生成各个语言分表
目标:
给所有的UIText组件添加本地化组件 找出所有文字图片 找出所有音频文件
实现:
执行【一键导出文本表并且添加本地化组件】(文本表导出位置自己选择)
结果:
场景,预制体UIText组件全部加上了本地化组件 且输出了一份游戏中文文本表
目标:
给未添加本地化组件的场景或者预制体UIText组件添加本地化组件
实现:
1.当数据表或者动态文本表未发生任何变化时
执行【添加场景&预制体文本本地化组件】
2.当数据表或者动态文本表发生改动时
执行【一键添加本地化组件并且更新数据表】
结果:
场景,预制体UIText组件全部加上了本地化组件 并且新文本更新到了文本表(当翻译字典里有该文本的释义文本表里会自动补全翻译) 单张文本表也会自动分割好
需提交的内容:
1.添加了所有本地化组件的对象
2.文本总表,单张文本表
输出目标:
输出一份未翻译的文本表给到翻译人员
实现:
原理:基于最新的文本表里的未翻译的文本生成一份未翻译文本表
1.当文本表不是最新的情况下,同时又不知道新文本应用于哪些地方
执行【一键添加本地化组件并且更新数据表】来生成最新的文本表
2.当文本表不是最新的情况下,知道新文本应用于哪些地方
数据表不是最新的:执行【更新数据表文本(含动态文本)】
动态文本表不是最新的:执行【更新动态文本】
预制体文本不是最新的:执行【添加预制体文本本地化组件】
场景文本不是最新的:执行【添加场景文本本地化组件】
3.当文本表最新的情况下
1.执行【从文本表生成未翻译文本表】会得到一份完整的未翻译文本表(包含临时文本以及不用翻译文本)
2.执行【从未翻译的文本表提取需要翻译的文本表】原理是有一份包含临时文本以及不用翻译的文本表 从未翻译的文本表把这些文本剔除掉
注意点:
1.需要时刻关心未翻译表里有那些内容 是否真的可以不用翻译(最好的做法是全翻译掉 减少维护成本)
结果:
这个时候会输出一份未翻译的文本表
等预设整体拼接完成后,在Asset目录下,选中当前预设,执行【添加场景或预设LocalizationText组件】一键给当前预制体添加本地化组件(建议当有2个以上UIText组件需要添加本地化组件 使用一键添加)
当然也可以添加一个UIText组件添加一个本地化组件
可能遇到的问题:
1.当UIText组件文本发生变化时
需要执行【更新文本表文本】
结果:
同时刷新文本总表和单张表下当前key值的文本
2.当UIText组件被删除时
在Asset目录下选中当前预制体 执行【删除单个场景或预设没用到的key】
结果:
同时删除文本总表和单张表该预设下没用到的key加文本
在Asset目录下选中当前图片或者音频需执行【添加图片或音频到文本表】
结果:
当前图片或音频的路径会自动保存到文本表里留作标识 用于后面提翻译的时候方便查找
因为一键添加本地化组件只会给源prefab上面添加不会给嵌套prefab添加
当嵌套prefab内容跟源prefab文本内容不一致的情况下 就会默认读取源prefab文本内容
这个时候就需要手动给嵌套prefab的文本重新生成一个key
最好的做法是不一样的文本内容代码里根据不同场景动态赋值
切换国内开发环境未设置语言
优化编辑器模式下读取总表文本 不读取分表文本
优化文本key值
单张表key值 转hash (重复key 优化)
prefab上不保存资源引用
分本总表一式两份