World.h 库里的 Trace API

  • Trace模式

    • TraceSingle 单个结果
    • TraceMulti 多个结果
  • Trace 的检测依据
    • ByChanne
    • ByObjectType
    • ByProfile

LineTraceSingleByChannel

由于一般不使用 World 里的Trace API,故本小结只举 LineTraceSingleByChannel 一个例子

  • Syntax

    bool LineTraceSingleByChannel(
    struct FHitResult& OutHit,
    const FVector& Start,
    const FVector& End,
    ECollisionChannel TraceChannel,
    const FCollisionQueryParams& Params = FCollisionQueryParams::DefaultQueryParam,
    const FCollisionResponseParams& ResponseParam = FCollisionResponseParams::DefaultResponseParam
    ) const;
  • 代码实现

    // 碰撞参数
    FCollisionQueryParams CollisonQueryParams(TEXT("QueryParams"),true,NULL);
    CollisonQueryParams.bTraceComplex = true;
    CollisonQueryParams.bReturnPhysicalMaterial = false;
    CollisonQueryParams.AddIgnoredActor(this); // 起始点和检测结果
    FVector BeginLoc = GetActorLocation();
    FVector EndLoc = BeginLoc + GetActorForwardVector() * 1000;
    FHitResult HitResult; // 射线检测
    GetWorld()->LineTraceSingleByChannel(HitResult, BeginLoc, EndLoc, ECollisionChannel::ECC_Visibility, CollisonQueryParams);
    // 绘制射线
    DrawDebugLine(GetWorld(), BeginLoc, HitResult.GetActor() ? HitResult.Location : EndLoc, FColor::Red, false, 1.0f);
    if (HitResult.GetActor())
    {
    UKismetSystemLibrary::PrintString(GetWorld(), HitResult.GetActor()->GetName());
    }

UKismetSystemLibrary 库里的 Trace API

  • 与蓝图使用的 Trace 节点对应,

  • 实际调用的是 World.h 里的 Trace 函数

LineTrace

LineTraceSingle

根据 Channel 检测单个物体

  • Syntax

    static bool LineTraceSingle(
    const UObject* WorldContextObject,
    const FVector Start,
    const FVector End,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray<AActor*>& ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult& OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor = FLinearColor::Red,
    FLinearColor TraceHitColor = FLinearColor::Green,
    float DrawTime = 5.0f
    );
  • ETraceTypeQuery 说明

    • 默认 TraceTypeQuery1 —— Visibility
    • 默认 TraceTypeQuery2 —— Camera
    • 可在 ProjectSettings->Engine->Collision->Trace Channels 添加自定义
  • 代码实现

    // 起始点和检测结果
    FVector BeginLoc = GetActorLocation();
    FVector EndLoc = BeginLoc + GetActorForwardVector() * 1000;
    FHitResult HitResult; // 要忽略的物体
    TArray<AActor*> IgnoreActors; // 射线检测
    bool bIsHit = UKismetSystemLibrary::LineTraceSingle(GetWorld(), BeginLoc, EndLoc, TraceTypeQuery1, false, IgnoreActors, EDrawDebugTrace::ForDuration, HitResult, true);
    if (bIsHit)
    {
    UKismetSystemLibrary::PrintString(GetWorld(), HitResult.GetActor()->GetName());
    }

LineTraceSingleForObjects

根据 Object Type 检测单个物体

  • Syntax

    static bool LineTraceSingleForObjects(
    const UObject* WorldContextObject,
    const FVector Start,
    const FVector End,
    const TArray<TEnumAsByte<EObjectTypeQuery> > & ObjectTypes,
    bool bTraceComplex,
    const TArray<AActor*>& ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult& OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor = FLinearColor::Red,
    FLinearColor TraceHitColor = FLinearColor::Green,
    float DrawTime = 5.0f
    );
  • EObjectTypeQuery 对应 ObjectType

    • 默认 ObjectTypeQuery1 —— WorldStatic
    • 默认 ObjectTypeQuery2 —— WorldDynamic
    • 默认 ObjectTypeQuery3 —— Oawn
    • 默认 ObjectTypeQuery4 —— PhysicasBody
    • 默认 ObjectTypeQuery5 —— Vehicle
    • 默认 ObjectTypeQuery6 —— Destructible
    • 可以再 ProjectSettings->Engine->Collision->Object Channels 添加自定义
  • 代码实现

    // 设置要检测的 Object Type
    TArray<TEnumAsByte<EObjectTypeQuery> > ObjectTypes;
    ObjectTypes.Add(EObjectTypeQuery::ObjectTypeQuery1); //开始检测
    bool bIsHit = UKismetSystemLibrary::LineTraceSingleForObjects(GetWorld(), BeginLoc, EndLoc, ObjectTypes, false, IgnoreActors, EDrawDebugTrace::ForDuration, HitResult, true);
    if (bIsHit)
    {
    UKismetSystemLibrary::PrintString(GetWorld(), HitResult.GetActor()->GetName());
    }

LineTraceSingleByProfile

根据 Collision Preset 检测单个物体

  • Syntax

    static bool LineTraceSingleByProfile(
    const UObject* WorldContextObject,
    const FVector Start,
    const FVector End,
    FName ProfileName,
    bool bTraceComplex,
    const TArray<AActor*>& ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult& OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor = FLinearColor::Red,
    FLinearColor TraceHitColor = FLinearColor::Green,
    float DrawTime = 5.0f
    );
  • ProfileName 对应 Collision Preset 的名称

  • 代码实现

    bool bIsHit = UKismetSystemLibrary::LineTraceSingleByProfile(GetWorld(), BeginLoc, EndLoc,TEXT("BlockAll"), false, IgnoreActors, EDrawDebugTrace::ForDuration, HitResult, true);
    if (bIsHit)
    {
    UKismetSystemLibrary::PrintString(GetWorld(), HitResult.GetActor()->GetName());
    }

LineTraceMulti

根据 Channel 检测多个物体,输出 TArray&

  • Syntax

    static bool LineTraceMulti(
    const UObject* WorldContextObject,
    const FVector Start,
    const FVector End,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray<AActor*>& ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray<FHitResult>& OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor = FLinearColor::Red,
    FLinearColor TraceHitColor = FLinearColor::Green,
    float DrawTime = 5.0f
    );

LineTraceMultiForObjects

根据 Object Type 检测多个物体,输出 TArray&

  • Syntax

    static bool LineTraceMultiForObjects(
    const UObject* WorldContextObject,
    const FVector Start,
    const FVector End,
    const TArray<TEnumAsByte<EObjectTypeQuery> > & ObjectTypes,
    bool bTraceComplex,
    const TArray<AActor*>& ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray<FHitResult>& OutHits,
    bool bIgnoreSelf, FLinearColor TraceColor = FLinearColor::Red,
    FLinearColor TraceHitColor = FLinearColor::Green,
    float DrawTime = 5.0f
    );

LineTraceMultiByProfile

根据 Collision Preset 检测多个物体,输出 TArray&

  • Syntax

    static bool LineTraceMultiByProfile
    (
    const UObject* WorldContextObject,
    const FVector Start,
    const FVector End,
    FName ProfileName,
    bool bTraceComplex,
    const TArray<AActor*>& ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray<FHitResult>& OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor = FLinearColor::Red,
    FLinearColor TraceHitColor = FLinearColor::Green,
    float DrawTime = 5.0f
    );

BoxTrace

  • BoxTraceSingle

    static bool BoxTraceSingle
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    const FVector HalfSize,
    const FRotator Orientation,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • BoxTraceMulti

    static bool BoxTraceMulti
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    FVector HalfSize,
    const FRotator Orientation,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • BoxTraceSingleForObjects

    static bool BoxTraceSingleForObjects
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    const FVector HalfSize,
    const FRotator Orientation,
    const TArray < TEnumAsByte < EObjectTypeQuery > > & ObjectTypes,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • BoxTraceMultiForObjects

    static bool BoxTraceMultiForObjects
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    const FVector HalfSize,
    const FRotator Orientation,
    const TArray < TEnumAsByte < EObjectTypeQuery > > & ObjectTypes,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • BoxTraceSingleByProfile

    static bool BoxTraceSingleByProfile
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    const FVector HalfSize,
    const FRotator Orientation,
    FName ProfileName,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • BoxTraceMultiByProfile

    static bool BoxTraceMultiByProfile
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    FVector HalfSize,
    const FRotator Orientation,
    FName ProfileName,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )

SphereTrace

  • SphereTraceSingle

    static bool SphereTraceSingle
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • SphereTraceMulti

    static bool SphereTraceMulti
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • SphereTraceSingleForObjects

    static bool SphereTraceSingleForObjects
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    const TArray < TEnumAsByte < EObjectTypeQuery > > & ObjectTypes,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • SphereTraceMultiForObjects

    static bool SphereTraceMultiForObjects
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    const TArray < TEnumAsByte < EObjectTypeQuery > > & ObjectTypes,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • SphereTraceSingleByProfile

    static bool SphereTraceSingleByProfile
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    FName ProfileName,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • SphereTraceMultiByProfile

    static bool SphereTraceMultiByProfile
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    FName ProfileName,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )

CapsuleTrace

  • CapsuleTraceSingle

    static bool CapsuleTraceSingle
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    float HalfHeight,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • CapsuleTraceMulti

    static bool CapsuleTraceMulti
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    float HalfHeight,
    ETraceTypeQuery TraceChannel,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • CapsuleTraceSingleForObjects

    static bool CapsuleTraceSingleForObjects
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    float HalfHeight,
    const TArray < TEnumAsByte < EObjectTypeQuery > > & ObjectTypes,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • CapsuleTraceMultiForObjects

    static bool CapsuleTraceMultiForObjects
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    float HalfHeight,
    const TArray < TEnumAsByte < EObjectTypeQuery > > & ObjectTypes,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • CapsuleTraceSingleByProfile

    static bool CapsuleTraceSingleByProfile
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    float HalfHeight,
    FName ProfileName,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    FHitResult & OutHit,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )
  • CapsuleTraceMultiByProfile

    static bool CapsuleTraceMultiByProfile
    (
    const UObject * WorldContextObject,
    const FVector Start,
    const FVector End,
    float Radius,
    float HalfHeight,
    FName ProfileName,
    bool bTraceComplex,
    const TArray < AActor * > & ActorsToIgnore,
    EDrawDebugTrace::Type DrawDebugType,
    TArray < FHitResult > & OutHits,
    bool bIgnoreSelf,
    FLinearColor TraceColor,
    FLinearColor TraceHitColor,
    float DrawTime
    )

参考

【UE4 C++】 射线检测 LineTrace 及 BoxTrace、SphereTrace、CapsuleTrace API的更多相关文章

  1. 【Unity3D】枪战游戏—发射子弹、射线检测

    一.子弹的碰撞检测: 因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了. 因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处 ...

  2. Unity3D 之射线检测

    这里来记录下射线检测的相关内容: 射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真. 射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候 ...

  3. Unity3D 5.0简单的射线检测实现跳跃功能

    这里是一个简单的跳跃,5.0和其他版本貌似不一样,并且,再起跳功能做的不完全. 不过一个基本的思路在这里. 1.首先,射线检测,这里是利用一个空对象,放到主角对象的下面 2.然后调节射线的位置,在主角 ...

  4. UGUI射线检测

    1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会自动挂上). Ignor ...

  5. Unity射线检测的用法总结

    RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  6. U3D学习10——关节和射线检测

    1.弹簧  2.铰链  3.固定关节  4.角色关节  5.自定义关节  6.raycast和raycasthit 射线有位移参数,可以设定只触发某一层的. 7.射线检测用于高速和精确 update是 ...

  7. Layabox 3D游戏开发学习笔记---射线检测,鼠标控制物体运动

    核心要点:3D物体碰撞是靠射线检测,射线与碰撞器相撞获取对应的碰撞点信息. class RayPicking03 { private ray: Laya.Ray; private point: Lay ...

  8. 【转】 [UnityUI]UGUI射线检测

    http://blog.csdn.net/lyh916/article/details/50947026 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂 ...

  9. Unity - Raycast 射线检测

    本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...

随机推荐

  1. freeswitch的event事件处理

    概述 之前的文章中,我们讲解了freeswitch的源码基本结构,如何新增一个插件式模块,以及如何在模块中新增一个命令式API接口和APP接口. freeswitch本身是事件驱动的,它可以并发响应多 ...

  2. 离线安装Windows Terminal

    Windows Terminal颜值高.适配好.速度快,是Windows 10下命令行工具的不二选择. 最近在公司电脑上安装Windows Terminal时遇到一个问题,由于公司电脑不能直接连接外网 ...

  3. 博主有偿带徒 《编程语言设计和实现》《MUD游戏开发》《软件破解和加密》《游戏辅助外挂》《JAVA开发》

    <考研专题>操作系统原理 理论解答:8K 实战 1.5W CPU设计 理论解答:1W 实战 2.5W <编程语言设计和实现>初窥门径<5K>:编译原理.编译设计小试 ...

  4. 运行FreeSWITCH的命令行参数

    一般来说,FreeSWITCH 不需要任何命令行参数就可以启动,但在某些情况下,你需要以一些特殊的参数启动.在此,仅作简单介绍.如果你知道是什么意思,那么你就可以使用,如果不知道,多半你用不到. 使用 ...

  5. POJ1426——Find The Multiple

    POJ1426--Find The Multiple Description Given a positive integer n, write a program to find out a non ...

  6. 3.15学习总结(Python爬取网站数据并存入数据库)

    在官网上下载了Python和PyCharm,并在网上简单的学习了爬虫的相关知识. 结对开发的第一阶段要求: 网上爬取最新疫情数据,并存入到MySql数据库中 在可视化显示数据详细信息 项目代码: im ...

  7. 使用Java api对HBase 2.4.5进行增删改查

    1.运行hbase 2.新建maven项目 2.将hbase-site.xml放在项目的resources文件夹下 3.修改pom.xml文件,引入hbase相关资源 <repositories ...

  8. 如何画UML,几种简单的模型分析

    如何画UML 前言 UML 类 类的关系 1.依赖关系 2.继承关系 3.实现关系 4.关联关系 5.聚合关系 6.组合关系 总结 参考 如何画UML 前言 最近在学习设计模式,其中不免涉及到 UML ...

  9. linux 服务器资源 监控工具

    工具一:vmstat(服务端) 一.vmstat选项参数解释 -V:显示vmstat版本信息 -n:只在开始时显示一次各字段名称 -a:显示活跃和非活跃内存 -d:显示各个磁盘相关统计信息 -D:显示 ...

  10. javascript 关闭当前页面

    1. 不带任何提示关闭窗口的js代码 <a href="javascript:window.opener=null;window.open('','_self');window.clo ...