虚幻引擎蓝图教程 - 蓝图类
蓝图类(Actor)
前言
按照上节所说,所有场景物体都可以在关卡蓝图操作。但这也会带来一个问题——当场景物体过多的时候,将所有功能集合在一个关卡蓝图,将会造成管理混乱。
而在Unreal Engine中,有一个继承自Actor的蓝图类。该类可以放置于游戏场景中(创建实例),也可以编写执行脚本。
概念解释
类好比某个物件的设计图纸,有详细的设计步骤与方法,设计出来的东西有自己的事件和属性。而对象则是由类这个设计图纸做出来的,并且拥有设计图纸的属性和方法。
这就好比:一个人是个对象,拥有姓名,身份证号,性别等属性,而方法就是吃饭,睡觉等。
蓝图类详解
右键,新建蓝图类
选择父类。目前放在场景的蓝图类继承于Actor。因此,我们将此类物体称为Actor。
蓝图重命名
创建完成后,双击此蓝图类,将会打开以下内容:
对以上界面的主要选项介绍:
组件:该Actor的组件。包括静态网格体,触发器等。
视口:该Actor的外观。目前没有静态网格体,而如图显示的是物体的中心。Actor在旋转的过程中都是绕着这个点旋转的。
Construction Script:构造函数脚本。在该类被创建的时候被执行。
事件图表:在触发事件的时候会执行。
其中系统默认给我们提供了三个事件,分别是事件开始运行,事件Actor开始重叠,以及事件Tick。
对此进行解释:
- 事件开始运行:当Actor创建完成后执行。在构造函数后。
- 事件Actor开始重叠:当此Actor与其他场景物体发生重叠/碰撞的时候执行。
- 事件Tick:和Unity的Update一样。每渲染一次执行一次。
为方便管理与维护,我们可以新建多个事件图表。按➕可以新建图标
也可以定义多个函数用于功能的封装。
事件与函数的区别
- 事件可以添加延迟节点(如Delay),函数不可以
- 函数里有返回值,事件没有
- 事件可以作为回调函数,函数不能直接作为回调
- 事件可以作为输入事件和碰撞事件的处理
- 实现接口的时候,有返回值的会变成函数,无返回值的会变成事件
- 事件可以发送网络信息,而函数不行(网络)
案例——自动门
按照上面的方法新建一个蓝图类,并将其命名为AutoDoor。
打开此蓝图类,添加组件静态网格体(位于DefaultSceneRoot的子组件)。
选中新添加的静态网格体组件。在右侧的细节静态网格体选择门。
确保门这个静态网格体的角落对准DefaultSceneRoot。
在关卡蓝图使用触发体积。但在这里使用Box Collision。
调整碰撞体积大小。使其对应门的两侧。
为Box Collision添加事件。在右侧细节->事件添加组件开始重叠时的事件:
添加完成。此时出现以下界面:
发生重叠后需要开门。于是需要获得门这个静态网格体的引用。可从左边的组件拉过来,并选择“获取StaticMash”
拉动Static Mesh的输入口,添加设置相对旋转
同理。再添加一个事件:组件结束重叠时:
同时执行关门操作
当然也可以使用时间轴,使开关门动画更加平滑
实现按E开门
- 添加事件:按下E键
- Pressed:按下
- Released:松开
删除上个案例的事件。将Press连接至时间轴的Play节点。
目前是接收不到按键事件的。所以还需要获取输入设备,并启用输入
若需要可以开关门,则需要一个Filp Flop节点:
该节点的作用是:先执行A,如果执行过A,就执行B。如果B执行过了就执行A,反复循环。