CommonUI In Cropout Demo
Cropout是虚幻官方开源的一个类似的RTS的游戏,和Lyra 一样使用了CommonUI,而Cropout是相对简单的纯蓝图项目。
官网:https://www.unrealengine.com/en-US/blog/cropout-casual-rts-game-sample-project
Layer
Cropout 和 Lyra 最大的区别,没有将 Game Stack 和 Menu Stack 放在同一个 Root Widget 里,它们分别在互相独立关卡里面。
个人认为,主关卡应该像Lara那样,同时支持两个Stack,不过lyra也是通过蓝图来创建Stack,考虑到stack的结构是几乎不会去改变的,我觉得应该放在C++ 层去实现,分配好Game 和 Menu两个 stack,提供给蓝图使用,减少蓝图使用的复杂度。
更多请参考这里
Common Input
Cropout 的commonUI没有使用5.4提供的Enhanced Input支持,落后一个版本。
虽然配置相对麻烦写,但更稳定,没有启用 Enhanced Input Support 后 手柄A键 被吃掉的问题。
让它支持EnhanceInput
虽然不需要DataTable,但需要配置一个DataAsset: - 新建 DataAsset->Common Mapping Context MetaData
-
配置全局默认,和单独指定。更多
-
找到父布局,把Mapping 设置好
-
最后,找到对应的BaseButton,Input-> 加入对应的Action即可
Bug
-
Cropout 是基于5.2-5.3的,依旧使用 SetInputMode 的方式来切换输入方式。可能会有鼠标控制错乱的bug,详细见xist的说明
用新feature解决
FaceButton Bottom
由于原项目使用的是 SetInputMode 来设置 输入模式,所以 它的 Xbox手柄 A键 没有被 模拟成 左键点击。
改用新 feature后,成功复现 FaceButton Bottom 被 CommonUI占用的问题。目前是用C++ 重写父类判断的方法来解决