《Unity3D高级编程 主程手记》第三章 数据表(三) 多语言的实现

        一般文字都会以 Key-Value 形式存放在 Excel 表里,就比如 Key 为 “RoleName”,Value 为 “角色名字”,或者 Key 为 “1101”,Value 为 “好友分享” 等。

        这种 Key-Value 形式一般会以 Int-String(整数对字符串)或 string-string(字符串对字符串)的形式存在。

整数形式

string content = GetTextString(12);

        缺点:看起来不是很美观;维护性太差,校验检查难度太大,效率太低。

字符串形式 

string content = GetTextString(“FightWin”);

        缺点: 双份内存, 可能需要用很长的字符串去获取另一个很长的内容,内存占用增加。

        解决:采用与数据配置表列的对齐方式一样的办法。通过文字表格自动生成一个类,用变量的形式去记录文字的 ID,通过文字表生成数据表,同时生成数据定义类,使用变量去代表数字。

Class TextKey
{
	public const BattleSceneFightAllianceWin = 1;
	public const BattleSceneFightAllianceLose = 2;
}
string content = Text.GetTextString(TextKey.BattleSceneFightAllianceWin);

多语言部分怎么处理?

简单的处理方式

        制作多个表,每个表一门语言。

string content = Text.GetTextString(TextKey.YouWin, Language.Chinese);

        问题:每次修改一处的语言内容就要对所有语言内容进行修改,调试起来非常麻烦。

合并数据表

        采用一对多的形式合并语言内容数据表,把一个表里的一个 Key 对应多个语言的文字内容写在一个表里面。

键值  中文  英文  日文   韩文
Win   赢了  Win  勝った 이기다

        策划设计人员和运营人员只要关心文字内容,程序员关心的是 Key 值,它们被完美的地拆分开来,各自分线工作。

拆分数据表的问题

        集中读取,游戏在加载数据表时,就需要在一瞬间集中处理,导致 CPU 阻塞时间过长,发生游戏卡顿现象,这样做并不合理。我们需要让游戏表现的尽可能的顺畅。

        分散读取比较可取,读取表数据时要合理安排读取顺序,将 I/O 与 CPU 消耗的时间分散开来。很多时候采用按需读取的方式去读取数据,但是当某个瞬间需要大部分数据时,按需读取不再有效,最好的办法是在加载时指定读取顺序,并隔帧读取。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值