UE4的射线拾取

本文介绍了UE4中的射线拾取功能,重点讲解了LineTraceSingle和LineTraceMulti两种拾取方法,以及射线拾取的主要参数,如起点、终点、碰撞通道和FCollisionQueryParams参数。FCollisionQueryParams中的bTraceComplex参数用于控制是否使用复杂的碰撞检测,而bReturnPhysicalMaterial则决定是否返回物理材质。此外,文章还提到了射线拾取的返回值和FHitResult中包含的拾取信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ray-Trace作用于射线拾取。

射线拾取主要相关
1.拾取函数是UWorld的多个方法。比如LineTraceSingle是单一拾取,拾取到一个之后就不继续穿透了,而LineTraceMulti会拾取多个目标。
2.射线拾取的主要参数有拾取开始点,结束点,拾取结果(一个FHitResult类型的引用,相当于返回值)拾取的碰撞通道和一个FCollisionQueryParams类型的参数。这个FCollisionQueryParams主要管理了相当多的碰撞相关参数。
3.拾取使用的碰撞模型是Simple模型,但是在FCollisionQueryParams里边有一个参数bTraceComplex。如果设置为true,则会使用pre poly碰撞来检测,这时候会有很大的计算开销,但是对于拾取来说是值得的,因为不会被看不见的边边角角给阻挡了。FCollisionQueryParams里边还有相当多的有用参数,比如bReturnPhysicalMaterial决定是否返回碰撞的物理材质,InIgnoreActor可以设置单独的不接受拾取的Actor。
4.射线拾取返回bool,每次调用都会返回,不阻塞。返回true时表示拾取到了物体。
5.拾取的所有结果都在FHitResult参数里,包括拾取的地点,法线和拾取到的Actor。

我们直接看看C++的一个拾取例子。

    FVector CamLoc;
    FRotator CamRot;

    if (Controller == NULL)
        
### 射线检测在Unreal Engine中的实现方式 #### 什么是射线检测? 射线检测是一种用于判断空间中两点之间是否存在障碍物的技术。它广泛应用于游戏开发领域,例如敌人视野范围内的玩家检测、鼠标点击位置的物体拾取以及物理交互等场景[^4]。 #### UE中的射线检测分类 在Unreal Engine中,射线检测可以根据不同的需求划分为多种类型: 1. **基于通道的单次射线检测** (`LineTraceSingleByChannel`) 此方法通过指定一个碰撞通道来执行一次性的射线测试。它可以快速验证某个方向上的第一个碰撞体。 2. **基于对象类型的单次射线检测** (`LineTraceSingleByObjectType`) 这种方法允许开发者更精确地控制哪些类别的Actor能够被射线命中。相比简单的通道检测更加灵活。 3. **基于轮廓配置文件的单次射线检测** (`LineTraceSingleByProfile`) 它利用预设好的轮廓配置文件来进行射线投射操作,适合复杂项目中统一管理不同种类的碰撞行为。 上述三种基本形式均属于直线型射线检测工具,在实际编码过程中需调用`UWorld::LineTrace*`系列函数完成具体逻辑构建[^3]。 #### C++代码实例展示如何设置并运行一条基础版本的射线追踪功能 下面给出一段标准C++脚本片段演示怎样初始化参数并对结果加以解析: ```cpp bool AMyGameModeBase::PerformRaycast(FVector StartLocation, FVector EndLocation) { FHitResult Hit; // 设置查询参数 FCollisionQueryParams TraceParams(SCENE_QUERY_STAT(PerformRaycast), true, this); TraceParams.bReturnPhysicalMaterial = false; // 执行射线检测 bool bHit = GetWorld()->LineTraceSingleByChannel( Hit, StartLocation, EndLocation, ECC_Visibility, // 使用可见性频道作为示例 TraceParams); if (bHit) { UE_LOG(LogTemp, Warning, TEXT("Hit Actor Name:%s"), *Hit.GetActor()->GetName()); return true; // 如果击中则返回True } return false; // 否则返回False表示未找到任何东西 } ``` 此段程序展示了从起始点到终点之间的路径上寻找首个接触实体的过程,并打印出该物体的名字。 #### 关键注意事项 当涉及自定义踪迹或者对象类别时,请务必确认已在项目的默认引擎设定文档(`DefaultEngine.ini`)里正确定义好相应的枚举项及其关联名称;另外为了提高后续维护效率建议采用宏定义简化书写流程提升可读性和一致性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值