Skip to main content
 首页 » 资源教程 » UE4教程

UE4 射线拾取&三维画线

2016年09月14日 20:29:0712380

虽然有人建议UE4使用C++创建VR项目,能避免一些坑爹的错误,但是我用C++创建,竟然问题更多,还存在创建不了的情况,也不知道是不是我的操作问题,快疯了。

于是我还是选择了蓝图创建VR项目,但是...

可能是写代码习惯了,蓝图用着相当别扭,而且有些功能甚至没有,我也不知道,反正是没找到。

最后,折中,用C++来写部分功能,再在蓝图中调用,这里就写了应用在VR手柄上的一个射线拾取,为了让用户能更好的操作,我们需要将射线在场景中绘制出来。


射线拾取


  1. //起点 终点  

  2. FHitResult RayGetHitResult(FVector TraceStart, FVector TraceEnd)    

  3. {    

  4.     FCollisionQueryParams TraceParams(FName(TEXT("TraceUsableActor")), truethis);    

  5.     TraceParams.bTraceAsyncScene = true;    

  6.     TraceParams.bReturnPhysicalMaterial = false;    

  7.     TraceParams.bTraceComplex = true;    

  8.     

  9.     //Hit是用来存储射线的一些数据,如Actor、坐标等等  

  10.     FHitResult Hit(ForceInit);    

  11.     if (GetWorld()->LineTraceSingle(Hit, TraceStart, TraceEnd, ECC_Visibility, TraceParams))    

  12.     {    

  13.         //绘制射线    

  14.         DrawRayLine(TraceStart, Hit.Location,0.03f);    

  15.     }    

  16.     return Hit;    

  17. }    




三维画线



  1. //起点 终点 绘制线的显示的时间  

  2. void DrawRayLine(FVector StartPos, FVector EndPos,float fLifeTime)  

  3. {  

  4.     ULineBatchComponent* const LineBatcher = GetWorld()->PersistentLineBatcher;  

  5.     const float LifeTime = fLifeTime;  

  6.     if (LineBatcher != NULL)  

  7.     {  

  8.         float LineLifeTime = (LifeTime > 0.f) ? LifeTime : LineBatcher->DefaultLifeTime;  

  9.           

  10.         LineBatcher->DrawLine(StartPos, EndPos, FLinearColor::Red, 10, 0.f, LineLifeTime);  

  11.     }  

  12. }  



如果需要在蓝图中调用,只需要在函数声明的上面写一个标记


  1. UFUNCTION(BlueprintCallable,Category="Damage")  


评论列表暂无评论
发表评论