为了通过 prefab 创建游戏对象,我们可以这样做:
但是这里有几个问题。首先,输入参数是字符串,一不留神会弄错。其次,我们可能希望在创建对象时设定对象的位置,并添加更多组件。所以说,从外部看,我们需要一个黑盒子接受数据标签作为输入,输出游戏对象。盒子内部的结构如下:
首先,我们把黑盒子的输入参数从字符串改成自定义对象:
接下来,我们发布事件(AddingComponent)给当前对象添加更多组件:
最后,我们使用 Blueprint 生成每个对象的位置:
但是随着游戏逻辑变得复杂起来,我们需要把代码拆分成更小的模块,比如:
接下来,PCInputManager 把命令发送给订阅者:
为了控制代码长度,我们可以创建多个转换器,每一个都实现了 IConvertInput,负责把某一组按键转化成相应的命令,比方说 MovementInput,SkillInput 和 InventoryInput。同时,稍微修改图 13 的代码:
还有一个问题。同一个按键,比方说左方向键,既可以在地下城里让玩家人物向左移动,也可以在物品栏里让光标向左移动。我们为每种游戏模式创建一个游戏对象,每个对象有独立的输入管理器,但是共享一套转换器。考虑到转换器内部有一个 Update() 方法,我们用另一个对象 XInputSwitcher 订阅某些事件,启用或禁用管理器,就这样解决了按键冲突的问题。
最后献上心の俳句:高一的暑假,人生中只有 NaN 次,千万要珍惜。
评论区
共 11 条评论热门最新