0. 互斥的思路
互斥:对单个指定Actor进行操作,对其他的Actor不进行操作的作用。
实现互斥的思路:
- 对其他的先进行NOT操作,再对指定的进行YES操作。
- 保存特定的Actor,仅对该Actor进行操作。
1. 控制器类与子类之间实现的互斥
1.1 父类与子类之间
父类包含子类,因此子类可以直接寻找父类,在父类层级对各子类进行互斥。
如在UI中,点击按钮实现对单个按钮(单个功能)的互斥。
通过事件分发器,子类对父类传送信息,可在父类中高层级达到控制。
1.2 控制器类与基类之间
控制器需要控制基类的运行,因此控制器类要包含基类,基类也需要包含控制器类实现相互方法调用。控制器类可以直接将基类存入数组来保存,基类可以在控制器类生成自己时传入得到控制器类。
需要注意对应基类需要实例化且在生成时暴露。
可以通过事件分发器在控制器类中对基类进行事件绑定(Bind),再在基类中进行事件调用(Call)。事件分发器最好写在Game Instance中,下图为Game Instance的创建。
2. 单例实现的互斥
单例在UE中实现的互斥相对比较简单,主要体现在添加唯一和利用set进行清除两个方面。比如,在场景中Controller肯定只需要一个,因此可以再添加之后把其它的Controller给删除点。
3. 使用游戏世界设置参数
在UE4中存在唯一的游戏模式,各Actor可以通过Game Mode和Projecct Settings的资源进行相互通信来达到互斥。
- HUD Class:主要控制并操作UI的显示与隐藏。
- Game State Class:主要控制并操作游戏的各状态,如天气特效、后期处理等。
- Game Instance:主要实现某些需要通信参数的保存和事件分发器,如UI与具体蓝图完成通信对某些参数的保存。