结构体
如果我们只想保存一些的属性,或者单纯的修改和获取它的值,可以使用结构体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个子类,分别实现他们的射击功能

子弹枪的射击方法

激光枪的射击方法

角色调用射击功能

本文讲解了如何使用结构体(Struct)在游戏和应用中存储属性,以及通过蓝图交互、事件分发、接口和面向对象编程实现数据共享与通信。涉及内容包括创建MyStruct、蓝图变量操作、事件触发、接口设计和多态应用实例。
1153





