🏆 导航菜单
🎪 扩展内容
🎯 沙盘引擎文档
🕹️ 文章及书籍&教程
🎖️ 外部的链接
🏆 导航菜单
🎪 扩展内容
🎯 沙盘引擎文档
🕹️ 文章及书籍&教程
🎖️ 外部的链接
《沙盘引擎》内置了一些“宏代码(Define)”,搭配相关API使用,可以将指定宏文本转换为实时获取结果的文本。
常用案例:网络传输后的本地翻译、内置信息获取(如玩家人数、版本等)、绑定按键映射等。
宏文本的表示方式:%define_key%
例如开发者制作了一个团队射击游戏,通常会在有玩家被击杀后输出杀敌信息到公屏,代码看起来应该像这样:
if(killer.Entity.Group == 1) { Message("CT-Team: " + killer.Entity.Name + " killed " + player.Entity.Name ); }else if(killer.Entity.Group == 2){ Message("T-Team: " + killer.Entity.Name + " killed " + player.Entity.Name ); }
这样的代码本身没有什么问题,但是如果希望不同地区玩家最终看到的是本地翻译后的结果,这就需要使用宏定义来实现。
首先,开发者应该按照规范自定义好语言文件,然后记住要使用的语言Key(例如:Mod.TeamGroup.CT | T
)。
if(killer.Entity.Group == 1) { Message("%Mod.TeamGroup.CT%: " + killer.Entity.Name + " killed " + player.Entity.Name ); } }else if(killer.Entity.Group == 2){ Message("%Mod.TeamGroup.T%: " + killer.Entity.Name + " killed " + player.Entity.Name ); }
使用此方式发送的消息(Message | Announce | Subtitle...
)会自动将宏文本(%xxx%
)进行识别,如果语言Key正确且存在,则会在消息到达玩家本地后,自动识别为玩家本地的语言。
这样即可解决不同地区的玩家最终得到不同的翻译结果。
例如开发者希望输出一些内置信息,可参考引擎已存在的本地宏文本(可参考下方),按需进行使用。
Message("Your EngineVersion: %EngineVersion%"); //"Your EngineVersion: V0.77" Message("Current Players: %PlayerCount%"); //"Current Players: 1"
有时开发者希望提醒玩家:“按下[?]键使用某功能”,如果开发者直接绑定按键代码,可以直接告知玩家服务器绑定的按键。
但如果开发者使用更为标准的BindNativeKey
绑定按键流程(允许玩家自定义按键),这就有可能出现玩家修改了默认按键的情况,此情况下需要获取到实时正确的按键代码,此问题可通过本地按键宏文本来解决。
Message("Press %KEY_World_Use% use!"); //"Press "F" use!
需要注意的是,如何让引擎知道这是一个本地按键宏文本?
没错,任何以KEY_
开头的宏文本均被优先认为是按键宏文本。
特别提醒:由于宏的机制,宏文本应该用于最终本地玩家解析,因此最终获取的结果也是本地玩家解析后的结果。
宏文本 | 功能说明 |
---|---|
%Language% | 正在使用的引擎语言名称 |
%ModLanguage% | 正在使用的模组语言名称 |
%PlayerCount% | 当前世界玩家数量 |
%EngineVersion% | 引擎版本信息 |
%EngineEdition% | 游戏授权版本(社区版、标准版) |
%Engine% | 引擎版权信息 |
%EveryOne% | 翻译:Native.Common.LocalDefine[0] |
默认情况下,宏文本可以直接在Message | Announce | Subtitle...
等功能自动进行解析,但如果有特殊或手动解析的需求,可以使用相关API过滤一次字符串。
宏文本解析API:FormatDefineText( text: string, includeColor: bool = true );