UE5 - 获取场景中指定类的Actor实例(附:缓存获取到的Actor)
作者:hangge | 2025-08-26 09:01
在 Unreal Engine 5 中,蓝图是实现游戏逻辑的重要工具。而“Get Actor of Class”是蓝图中非常实用的一个节点,常用于获取场景中指定类的 Actor 实例。无论是获取主角、敌人、道具还是触发器,只要知道它的类,就能快速引用它。本文将通过样例演示该节点的使用。




1,使用样例
(1)为了方便测试,我们首先创建一个继承 Actor 的蓝图类 BP_ScoreManager,其内部添加一个自定义变量和一个自定义函数:
- Score 为整数类型变量,默认值为 0,表示当前总分。
- AddScore 方法有一个输入参数,每次调用会将传入的值与当前分数相加并更新总分,最后返回当前总分。

(2)接着将 BP_ScoreManager 拖拽到关卡中。

(3)最后,我们在关卡蓝图中使用“Get Actor of Class”节点获取这个 BP_ScoreManager 实例,并调用其内部的方法,然后将方法返回值打印出来。
提示:
- “Get Actor of Class”节点可以在当前关卡中,查找并返回第一个找到的、属于指定类(Class)的 Actor 实例。
- 如果需要获取场景中所有该类的 Actor,应使用 “Get All Actors of Class” 节点,其返回的是一个 Actor 数组(Array)。
2,运行测试
编译保存后运行游戏,当我们每按下键盘数字 0 键时,总分都会增加 100 并打印到屏幕上。

附:缓存获取到的 Actor 提升性能
1,为什么要缓存 Actor?
(1)这是由于“Get Actor of Class”节点每次从场景中获取指定类的实例的时候,都需要在场景中进行查找,最坏的情况下需要把场景中的每个物体都遍历一次。如果场景中物体很多,那么查找操作会持续较长时间,是一个耗性能的操作。如果在蓝图中不慎在 Tick 事件中使用到了“Get Actor of Class”节点,就会导致每帧都需要进行查找,这样子会极大地影响游戏的性能。
(2)所以最好的方法是在遍历以及找到实例之后就缓存到成员变量中,下次直接从缓存中调用实例,就可以避免查找实例这一耗时操作了。
2,如何缓存 Actor
(1)我们可以在需要获取 Actor 的蓝图中新建一个成员变量“CachedScoreManager”,类型为“BP_ScoreManager”

(2)然后创建一个自定义函数“GetScoreManager”,该函数会自动获取并缓存实例,具体内部逻辑如下:
- 首先使用“Is Valid”函数判断 CachedScoreManager 变量是否已经不为空,如果不为空,表示变量已经缓存了该 Actor 实例,那么直接返回 CachedScoreManager 变量即可。
- 如果 CachedScoreManager 是空值,那么我们会使用“Get Actor of Class”节点来从场景中搜寻该实例。节点查找到 BP_ScoreManager 实例后会作为返回值 ReturnValue。我们将 RetunValue 设置给 CachedScoreManager 变量进行缓存,以加速下一次实例获取。

(3)最后我们就可以使用这个自定义函数“GetScoreManager”获取 BP_ScoreManager 的实例了:
全部评论(0)