一般文字都会以 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 消耗的时间分散开来。很多时候采用按需读取的方式去读取数据,但是当某个瞬间需要大部分数据时,按需读取不再有效,最好的办法是在加载时指定读取顺序,并隔帧读取。