【虚幻C++笔记】碰撞检测
目录
- 碰撞检测
- 参数详情
- 示例用法
碰撞检测
显示名称 | 中文名称 | C++ |
---|---|---|
Sphere Trace By Channel | 按通道进行球体追踪 | UKismetSystemLibrary::SphereTraceSingle |
Sphere Trace By Profile | 按描述文件进行球体追踪 | UKismetSystemLibrary::SphereTraceSingleByProfile |
Sphere Trace For Objects | 针对Object进行球体追踪 | UKismetSystemLibrary::SphereTraceSingleForObjects |
Multi Sphere Trace By Channel | 按通道进行多球体追踪 | UKismetSystemLibrary::SphereTraceMulti |
Multi Sphere Trace By Profile | 按描述文件进行多球体追踪 | UKismetSystemLibrary::SphereTraceMultiByProfile |
Multi Sphere Trace For Objects | 针对object进行多球体追踪 | UKismetSystemLibrary::SphereTraceMultiForObjects |
Box Trace By Channel | 按通道进行盒体追踪 | UKismetSystemLibrary::BoxTraceSingle |
Box Trace By Profile | 按描述文件进行盒体追踪 | UKismetSystemLibrary::BoxTraceSingleByProfile |
Box Trace For Objects | 针对Object进行盒体追踪 | UKismetSystemLibrary::BoxTraceSingleForObjects |
Multi Box Trace By Channel | 按通道进行多盒体追踪 | UKismetSystemLibrary::BoxTraceMulti |
Multi Box Trace By Profile | 按描述文件进行多盒体追踪 | UKismetSystemLibrary::BoxTraceMultiByProfile |
Multi Box Trace For Objects | 针对object进行多盒体追踪 | UKismetSystemLibrary::BoxTraceMultiForObjects |
Line Trace By Channel | 按通道进行线条追踪 | UKismetSystemLibrary::LineTraceSingle |
Line Trace By Profile | 按描述文件进行线条追踪 | UKismetSystemLibrary::LineTraceSingleByProfile |
Line Trace For Objects | 针对object进行线条追踪 | UKismetSystemLibrary::LineTraceSingleForObjects |
Multi Line Trace By Channel | 按通道进行多线条追踪 | UKismetSystemLibrary::LineTraceMulti |
Multi Line Trace By Profile | 按描述文件进行多线条追踪 | UKismetSystemLibrary::LineTraceMultiByProfile |
Multi Line Trace For Objects | 针对object进行多线条追踪 | UKismetSystemLibrary::LineTraceMultiForObjects |
Capsule Trace By Channel | 按通道进行胶囊体追踪 | UKismetSystemLibrary::CapsuleTraceSingle |
Capsule Trace By Profile | 按描述文件进行胶囊体追踪 | UKismetSystemLibrary::CapsuleTraceSingleByProfile |
Capsule Trace For Objects | 针对object进行胶囊体追踪 | UKismetSystemLibrary::CapsuleTraceSingleForObjects |
Multi Capsule Trace By Channel | 按通道进行多胶囊体追踪 | UKismetSystemLibrary::CapsuleTraceMulti |
Multi Capsule Trace By Profile | 按描述文件进行多胶囊体追踪 | UKismetSystemLibrary::CapsuleTraceMultiByProfile |
Multi Capsule Trace For Objects | 针对object进行多胶囊体追踪 | UKismetSystemLibrary::CapsuleTraceMultiForObjects |
参数详情
输入引脚
- Start:射线起点的位置。
- End:射线终点的位置。
- Radius:球体的半径。
- Trace Channel:碰撞通道,用于指定哪些类型的物体可以被检测到。常见的通道包括 Visibility、Camera、WorldStatic 等。
- bTrace Complex:是否启用复杂碰撞几何体的检测。如果设置为 True,则会检测复杂的静态网格体;如果设置为 False,则只检测简单的碰撞盒。
- bFind Initial Overlap:是否检测初始重叠。如果设置为 True,则会在起点处检测是否有重叠的物体。
- bIgnore Self:是否忽略自身物体的碰撞。如果设置为 True,则不会检测到执行该节点的物体本身。
- Actor to Ignore:需要忽略的特定 Actor。你可以在这里指定一个或多个 Actor,使其不参与碰撞检测。
- bShow Trace:是否在编辑器中显示射线追踪的可视化效果。这在调试时非常有用。
- bPersistent Show Trace:是否持续显示射线追踪的可视化效果。如果设置为 True,即使游戏停止,也会继续显示。
输出引脚
- Out Hit:如果检测到碰撞,这里会返回一个 Hit Result 结构体,包含碰撞的详细信息,如碰撞位置、碰撞物体等。
- Return Value:布尔值,表示是否检测到碰撞。如果检测到碰撞,返回 True;否则返回 False。
示例用法
const FVector ActorLocation = GetActorLocation();TArray<TEnumAsByte<EObjectTypeQuery>> ObjectTypes;ObjectTypes.Emplace(EObjectTypeQuery::ObjectTypeQuery1); // WorldStaticObjectTypes.Emplace(EObjectTypeQuery::ObjectTypeQuery2); // WorldDynamicObjectTypes.Emplace(EObjectTypeQuery::ObjectTypeQuery3); // PawnObjectTypes.Emplace(EObjectTypeQuery::ObjectTypeQuery4); // PhysicsBodyObjectTypes.Emplace(EObjectTypeQuery::ObjectTypeQuery5); // VehicleObjectTypes.Emplace(EObjectTypeQuery::ObjectTypeQuery6); // DestructibleTArray<FHitResult> HitResults;TArray<AActor*> ActorsToIgnore;ActorsToIgnore.Add(this); // 忽略自身if (UKismetSystemLibrary::SphereTraceMultiForObjects(GetWorld(), ActorLocation, ActorLocation, Area, ObjectTypes,false, ActorsToIgnore, EDrawDebugTrace::ForDuration, HitResults, true)){for (FHitResult HitResult : HitResults) {if (HitResult.GetActor() != nullptr) {ApplyEffectToTarget(HitResult.GetActor());}}}