Part1前言

本文是inveta团队整理的关于UE5的蓝图相关概念和使用方法,适合蓝图初学者入门。

Part2基本概念

1GameInstance (游戏实例)

它的生命周期是,游戏开始一直到游戏结束都一直存在,所以用它可以实现共享不同关卡中的数据

f35e422766116ba991863e0bbe330ee3.png

我们可以在上图中的游戏实例类里面更改自定义的游戏实例类。

2GameMode(游戏模式)

游戏一些玩法,游戏的特性,该游戏关卡中的一些特定的方法可以封装在这里面,然后该关卡中的蓝图可以通过获取游戏模式来调用它里面的特定方法,一个关卡一个。

d0a7f2d14973decf3b92fb8f6d267ae7.png

我们可以在指定的关卡的 世界场景设置-游戏模式-游戏模式重载 里面,把它更改成自定义的游戏模式蓝图类。

3Pawn

玩家可控制的对象,只要定义了一个Pawn类,你就可以对它进行控制。比如我们的视角旋转等

4HUD(屏幕显示)

用于显示屏幕上要显示的东西,比如文本框等界面

5PlayerController(玩家控制器)

接收玩家输入的控制信息,比如鼠标,键盘等

6Actor

可放置到场景中的都是actor。

7Character(角色)

拥有移动组件的类,创建它的时候,可以在看到里面会多添加一个 “角色移动”的组件,也只有它能有这个组件,一般一个游戏里的主角用它

8ActorComponent(actor 组件)

用于封装一些看不见的信息组件,比如一个物体的属性。意思就是只有数值类的东西,没有实际的物体

9SceneComponent(场景组件)

它和actor组件相反,它是可见的能放入场景中的物体。如果要它的详细信息,通过细节面板查看

10Object

是所有的基类

11BluePrint Function Library (蓝图函数库)

用于封装一系列的函数,可以用来封装一些公用的函数,类似于一个工具类。蓝图函数库里面的函数是全局可见的,意思就是在其他蓝图类中可以直接调用里面的函数。

12BluePrint Interface (蓝图接口)

一个蓝图接口是一个或多个Function的集合,只有函数声明没有具体实现,可以被添加至别的蓝图中,任何添加了接口的蓝图都可以保证具有这些功能,在每个添加了蓝图接口的蓝图类中,都可以为其添加功能实现。类似编程中的接口概念。允许不同类型的对象通过一个公共接口来访问他

定义蓝图接口

570104e66518957c0bf8a1956d843ddb.png

通过Blueprints中的Blueprint Interface来创建一个蓝图接口

52e1c0f7c5ac4c3e7738c427e99242bc.png

在蓝图接口中添加自己需要的接口方法

42db197cf1b74560eb4063c63f1da921.png

添加接口需要输入参数和返回值类型,Inputs输入参数,Outputs返回数据,也可以无需输入参数和返回数据。

使用蓝图接口

在需要实现接口的蓝图类中打开Class Settings

5d4d535bd11f9a89e6b550cabe110c97.png

在Details(明细)里面找到

263d0f766ba05d3a9d53d5f1cdb46bdd.png

点击 Add 添加定义的接口

f30c7ee14e7c31dbd61502e2bcbc75e4.png

这时候在图表列表中会展示我们接口定义的方法,因为这是纯蓝图的,可以被完全兼容使用
● 接口的调用

a18374bbb7992a30e043a683ec6ef042.png

蓝图接口的使用,需要注意需要传递Target,也就是接口执行的对象,该对象必须已经实现了这个接口。然后执行这个接口里面的方法,蓝图中任意地方都可以调用接口

13BluePrint Macro Library (蓝图宏库)

它是一个宏或者多个宏的集合。首先我们需要明白宏的概念,简单来说,宏也相当于一个功能,和函数,事件一样。
它们的区别
● 函数允许有一个执行引脚和一个输出引脚,事件只允许有一个执行引脚,宏允许有多个执行引脚和多个输出引脚。
● 函数和宏允许有返回值,而事件不允许有返回值。
● 事件和宏中可以使用UE提供的延迟节点(如:TimeLine),函数不可以。
● 函数和事件可以跨蓝图类访问,而宏只能在定义的蓝图类中调用。
● 函数可以被继承,而宏不可以被继承,子类无法使用父类中定义的宏。
● 宏库可以跨蓝图类访问
● 函数和宏的调用是同步执行,需要等待函数或宏内部逻辑执行完毕才进行接下来的逻辑,事件是异步执行,触发事件的地方无需关心事件内部的逻辑,只需要触发事件即可执行接下来的逻辑。

Part3蓝图通信

14直接通信

指的是两个蓝图类相互直接调用里面的方法或变量 比如:

3d71c97ef2c1f178b6482c20310c2f30.png

通过 "获取类的所有actor" 获取到 自定义的BP_SmallDevice这个蓝图类,然后就可以调用BP_SmallDevice里面定义的函数,变量等。

15类型转换

把一个类型转换成指定的类型 如:

f18b441af4d44b341fc2eb31b2b41212.png

16接口

指声明函数,但是不实现功能,具体功能让添加了这个接口的蓝图类来实现,也可以通过查看哪些子类实现了这个接口,哪些没有实现,然后来区别处理不同的功能

17事件分发器

简单来讲就是事件广播,只要某个类绑定了这个事件,都能连接上这个事件方法继续下面的操作

执行流程

1、发信者利用事件分发器,发送消息到世界。
2、发信者无法从接收者那里得到任何的信息(即返回值),也不知道谁接收到了消息。
3、带有消息接收器的人,会在接收到消息后执行后续的操作。

使用分发器

发信者蓝图中,把刚建立好的事件分发器拖入到编辑器中,选择Call, 连接到某个事件后面,可以是输入事件(鼠标,键盘),也可以是自定事件,之后出一个调用信号。接收者蓝图中,先获取发信者的引用,然后绑定发信者蓝图中的事件分发器,绑定分发器的节点中的 Event引脚连接一个自定义的事件,然后执行后续操作。
思维导图

80234d3e522c23e47a260b27eb2a99db.png

Part4蓝图常用节点

18流程控制节点

●  Branch 分支  
●  Delay 延迟  
●  Do Once 执行一次  
●  Do N 执行N次  
●  DoOnce MultiInput 执行一次多次输入输出  
●  Filp Flop 翻转  
●  Gate 门  
●  MultiGate 多门  
●  Retriggerable Delay 可触发延迟  
●  Sequence 序列

19Branch

4cfb877410481c42aedf5f2ac9d609f6.png它类似于 if else 语句,Condition指的是语句中的判断条件,

20Delay

515bf9e2a22141c995e769c9017d3737.png

它用于延迟执行后面的动作,Duration指的是需要延长多少时间,单位秒

21Do Once

指首次命中后执行一次,重置后可以重新执行一次。Reset 重置 选中 Start Closed 表示开始时不能直接执行,需要重置了后才能执行。例如:

b92f094f16f935639bbb623b52f1025a.png

按了1键后,会在屏幕中打印Hello字符串,如果继续按1 ,屏幕不会有输出,需要按过2重置后,再按1才会有输出。图中由于勾选了 Start Closed,所以第一次按1 的时候,没有打印Hello,需要先按下2 ,然后再按 1 才会又输出。

22Do N

aac6b336af4f4cf4f828bfbac78eae68.png

指执行N次,Enter 表示输入,N 表示可执行的次数,Reset 表示重设,Exit 表示输出,Counter 表示当前执行的次数。示例:

f616bb06004473214bd79c4d03dccc35.png

按数字1键的时候,执行字符串打印,连续按3次后,都能打印字符串,超过3次后,无法打印了,按数字键2后,又可以继续连续执行3次。

23DoOnce MultiInput

e7b5e33e5d016cf15b60821d7a3045a3.png

它类似于switch语句,In Out 一一对应,A In(A输入) 对应 A Out (A输出),Reset In (重置输入)对应 Reset Out(重置输出),如果需要添加一对输入输出,点击 添加引脚即可。示例:

a6597b09c83c784cdefafde464068ed4.png

按下 1,2,3输入对应的字符串,按下Z ,输出刷新。每执行一次,就需要重设一次,才能再次执行。

24Filp Flop

de6ec332c606d46ce07040be9120a3ab.png

Filp Flop 可用于切换状态,is A 表示从 A 开始输出 示例:

fb92bc30e4d420e672bcab119d324cd6.png

按下 1 打印字符串 输出A,再次按下 1 ,打印字符串 输出B

25Gate

9543d22d6101f4a3c0586a5dc0c9f723.png

Enter:输入 Open:打开门 Close:关闭门 Toggle:切换门状态 Start Closed:初始门状态,开始时无法直接输出,相当于 Close 状态。需要切换到 Open 状态才能输出 只有门开启时可以输出执行

26MultiGate 多门

3a6ba14d93412a2d65cc114bc5445624.png

Reset:重置 Out 0:输出节点0 Out 1:输出节点1 ... Start Index:初始下标 Is Random:是否随机, 打勾后表示随机输出 Loop:是否循环 示例:

ef62734065b96ea7daca8cf6cc32189b.png

按下1 ,随机打印字符串。

27Retriggerable Delay 可触发延迟

9e597e71c6a713a1854c2fe220549c4a.png

和Delay功能差不多,区别在于该节点再次触发会重新计时

28Sequence(序列)

b8813d82057dc45d42955a59fa6aa807.png

可以同时进行多个输出,一般都是Then0 执行完后执行Then1,依次类推。使用它可以把一个复杂的流程分成几部分来写,这样使得条理清晰,方便维护。

Part5总结

本文主要介绍了UE5蓝图的相关概念,并梳理出了蓝图通信以及常用节点的使用方法。

Part6关于IN VETA

IN VETA是一支由建模、美术、UE5组成的年轻团队。

30f3a05db3582eb9d78de7db77d5e13f.jpeg

我们的开源项目:
https://github.com/inveta

我们致力于三维数字孪生技术分享与研发。
欢迎与各界朋友一起探讨技术与商务合作,一起推动数字孪生的发展。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐