结构体
如果我们只想保存一些的属性,或者单纯的修改和获取它的值,可以使用结构体Struct
创建一个结构体MyStruct
在其他蓝图类中创建一个MyStruct的变量,使用和修改它的数据
蓝图通信
直接引用
场景中存在该蓝图的实例,就可以通过公开的对象变量获得对目标蓝图的参考
或者直接使用以下方式寻找
通过事件分发器
通过事件传递,触发自定义事件的方式来通信
我们在角色按下F键时,调用MyEvent事件,携带一个参数
在其他蓝图类中先绑定刚才的MyEvent事件,当MyEvent事件触发时,执行我们写的自定义事件,并且可以使用参数
其他任意蓝图类都能绑定MyEvent事件
通过蓝图接口
接口适合一对多的通信
我们创建一个互动的接口,当角色接近时,触发BP_Cube和BP_Sphere的互动事件
在BP_Cube和BP_Sphere的类设置中都继承Interface_hudong接口
我们在搜索接口的时候,会有事件和函数,函数用来触发事件的,所以在一对多的设计中,函数写在一中,事件写在多中
写入BP_Cube和BP_Sphere触发互动事件后的打印事件
在角色中写入由通道检测到的actor,如果是继承互动接口的,就触发它的互动事件
面向对象
面向对象三大特征,封装、继承和多态
案例:封装一把枪的基类,场景中有2把枪都继承这个枪的基类,都继承了能被拾取和发射子弹2个功能,但这2把枪的发射子弹类型不同(多态)
首先,我们一个枪的基类,他有射击,被拾取、被丢弃的方法,还有一个持枪者的变量
当和抢的区域重叠时,设置持枪者为当前角色,并且枪被拾取
枪被拾取的方法
枪被丢弃的方法
持枪者按下G时触发枪被丢弃的方法
枪的被拾取、被丢弃都是枪的基础功能,我们创建枪的子类时,这些功能都会被继承
我们还没实现射击的方法,因为每把枪都不一样的射击功能(多态),我们应该写在子类的方法中,父类只定义方法
我们创建枪的2个子类,分别实现他们的射击功能
子弹枪的射击方法
激光枪的射击方法
角色调用射击功能