虚幻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
|
4.如果使用By Profile则需要设置Trace Channel
|
5.如果使用For Object则需要设置Trace 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的几种方式,如有疑问,可以留言。