虚幻5 查找Actor的几种方式

虚幻5查找Actor有哪几种几种方式?

遍历、碰撞通道(Trace Channel)、Overlap等各有什么优劣呢?


遍历方式

Get All Actors Of Class通过类获取,不需要类型转换
Get All Actors Of Class by Tag通过类获取,并且通过Tag筛选过,不需要类型转换
Get All Actors by Tag获取Actor类,通过Tag筛选,需要类型转换

能不用就不用,如果要用,谨慎使用,适用场景

    • 游戏中,在明确场景中不会有太多对象时使用。
    • 在Editor中,debug或者写一些工具时用。

因此我推荐用以下几种方法来做。

第一种:碰撞通道检测

以Sphere为例有以下几种:

函数说明
Sphere Trace By Channel通过Trace channel进行检测,结果是单个对象
Multi Sphere Trace By Channel通过Trace channel进行检测,结果是一个数组
Sphere Trace By Profile通过碰撞进行检测,结果是单个对象
Multi Sphere Trace By Profile通过碰撞进行检测,结果是一个数组
Sphere Trace For Object通过ObjectChannel进行检测,结果是单个对象
Multi Sphere Trace For Object通过ObjectChannel进行检测,结果是一个数组

补充说明:

1.除了sphere以外,还有Box、Capsule、Line,他们形状不同,用法基本相同;
2.实际开发中,起始点通常传不同的坐标
3.如果使用By Channel则需要设置Trace Channel

最多配置18种通道;
在Editor->Engine->Collision->Trace Channel配置;

4.如果使用By Profile则需要设置Trace Channel

在Editor->Engine->Collision->Preset配置;

5.如果使用For Object则需要设置Trace Channel

在Editor->Engine->Collision->Object Channel配置;

6.Trace Complex尽量不勾选

勾选后会使用复杂碰撞进行运算,但对实际体验几乎没提升;

 


第二种:Overlap 检测

我们同样可以对检测到的Actor数组依次执逻辑。

Sphere Overlap Actors标准的范围overlap,使用的ObjectType
Box Overlap Actors同上,只是形状不同
Capsule Overlap Actors同上,只是形状不同
    • 返回的对象是标准的Actor类,因此需要类型转换,或者使用接口来调用具体方法;
    • Object Type可以在 Editor->Engine->Collision->Object Channel 中新增;
    • 被检测物体需要开启Query;

第三种:存引用

思路是:

    • 在Actor被创建时,将自己存在一个地方,
    • 如果你是写单机,可以存在GameMode、GameState;
    • 或者干脆存在玩家Controller里都可以(前提是你确保Controller已经被加载)
    • 如果是带有联机功能的游戏,建议存在GameState里(前提是你已经熟练掌握网络同步)

 

  •  注意,这种存法,需要你去管理Actor
    • 被创建时,存进去;
    • 被销毁时,也要相应移除;
    • 对于重复的Actor可以不进行添加,防止重复触发;

以上就是虚幻检测Actor的几种方式,如有疑问,可以留言。