虚幻引擎蓝图教程 - 蓝图类

蓝图类(Actor)

前言

按照上节所说,所有场景物体都可以在关卡蓝图操作。但这也会带来一个问题——当场景物体过多的时候,将所有功能集合在一个关卡蓝图,将会造成管理混乱。

而在Unreal Engine中,有一个继承自Actor的蓝图类。该类可以放置于游戏场景中(创建实例),也可以编写执行脚本。

概念解释

类好比某个物件的设计图纸,有详细的设计步骤与方法,设计出来的东西有自己的事件和属性。而对象则是由类这个设计图纸做出来的,并且拥有设计图纸的属性和方法。

这就好比:一个人是个对象,拥有姓名,身份证号,性别等属性,而方法就是吃饭,睡觉等。

蓝图类详解

  1. 右键,新建蓝图类

    image-20220309154650975

  2. 选择父类。目前放在场景的蓝图类继承于Actor。因此,我们将此类物体称为Actor。

    image-20220309154828330

蓝图重命名

image-20220309154852966

  1. 创建完成后,双击此蓝图类,将会打开以下内容:

    image-20220309154957918

对以上界面的主要选项介绍:

  • 组件:该Actor的组件。包括静态网格体,触发器等。

  • 视口:该Actor的外观。目前没有静态网格体,而如图显示的是物体的中心。Actor在旋转的过程中都是绕着这个点旋转的。

  • Construction Script:构造函数脚本。在该类被创建的时候被执行。

    image-20220309155343107

  • 事件图表:在触发事件的时候会执行。

    image-20220309155544019

    其中系统默认给我们提供了三个事件,分别是事件开始运行,事件Actor开始重叠,以及事件Tick。

    对此进行解释:

    • 事件开始运行:当Actor创建完成后执行。在构造函数后。
    • 事件Actor开始重叠:当此Actor与其他场景物体发生重叠/碰撞的时候执行。
    • 事件Tick:和Unity的Update一样。每渲染一次执行一次。
  • 为方便管理与维护,我们可以新建多个事件图表。按➕可以新建图标

    image-20220309160213386

  • 也可以定义多个函数用于功能的封装。
    image-20220309160311233

事件与函数的区别

  • 事件可以添加延迟节点(如Delay),函数不可以
  • 函数里有返回值,事件没有
  • 事件可以作为回调函数,函数不能直接作为回调
  • 事件可以作为输入事件和碰撞事件的处理
  • 实现接口的时候,有返回值的会变成函数,无返回值的会变成事件
  • 事件可以发送网络信息,而函数不行(网络)

案例——自动门

  1. 按照上面的方法新建一个蓝图类,并将其命名为AutoDoor。

    image-20220309160628815

  2. 打开此蓝图类,添加组件静态网格体(位于DefaultSceneRoot的子组件)。

    image-20220309160803587

  3. 选中新添加的静态网格体组件。在右侧的细节静态网格体选择门。

    image-20220309161035919

  4. 确保门这个静态网格体的角落对准DefaultSceneRoot。

    image-20220309161136217

  5. 在关卡蓝图使用触发体积。但在这里使用Box Collision。

    image-20220309161251926

  6. 调整碰撞体积大小。使其对应门的两侧。

    image-20220309161433547

  7. 为Box Collision添加事件。在右侧细节->事件添加组件开始重叠时的事件:

    image-20220309161657013

  8. 添加完成。此时出现以下界面:

    image-20220309161730997

  9. 发生重叠后需要开门。于是需要获得门这个静态网格体的引用。可从左边的组件拉过来,并选择“获取StaticMash”

    image-20220309161931972

    image-20220309162004089

  10. 拉动Static Mesh的输入口,添加设置相对旋转

    image-20220309162134451

    image-20220309162228515

  11. 同理。再添加一个事件:组件结束重叠时:

    image-20220309162441800

    同时执行关门操作

    image-20220309162638572

  12. 当然也可以使用时间轴,使开关门动画更加平滑

    image-20220309162934514

实现按E开门

  1. 添加事件:按下E键

image-20220309163403098

image-20220309163523809

  • Pressed:按下
  • Released:松开
  1. 删除上个案例的事件。将Press连接至时间轴的Play节点。

    image-20220309163657427

  2. 目前是接收不到按键事件的。所以还需要获取输入设备,并启用输入

    image-20220309164045577

  3. 若需要可以开关门,则需要一个Filp Flop节点:

    image-20220309164610778

    该节点的作用是:先执行A,如果执行过A,就执行B。如果B执行过了就执行A,反复循环。


虚幻引擎蓝图教程 - 蓝图类
https://amekiri.cn/2022/04/13/unreal-blueprint-class/
作者
Amekiri
发布于
2022年4月13日
许可协议