zoukankan      html  css  js  c++  java
  • UE4 射线拾取&三维画线

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

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

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

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


    射线拾取

    //起点 终点
    FHitResult RayGetHitResult(FVector TraceStart, FVector TraceEnd)  
    {  
    	FCollisionQueryParams TraceParams(FName(TEXT("TraceUsableActor")), true, this);  
    	TraceParams.bTraceAsyncScene = true;  
    	TraceParams.bReturnPhysicalMaterial = false;  
    	TraceParams.bTraceComplex = true;  
      
    	//Hit是用来存储射线的一些数据,如Actor、坐标等等
    	FHitResult Hit(ForceInit);  
    	if (GetWorld()->LineTraceSingle(Hit, TraceStart, TraceEnd, ECC_Visibility, TraceParams))  
    	{  
    		//绘制射线  
    		DrawRayLine(TraceStart, Hit.Location,0.03f);  
    	}  
    	return Hit;  
    }  


    三维画线

    //起点 终点 绘制线的显示的时间
    void DrawRayLine(FVector StartPos, FVector EndPos,float fLifeTime)
    {
    	ULineBatchComponent* const LineBatcher = GetWorld()->PersistentLineBatcher;
    	const float LifeTime = fLifeTime;
    	if (LineBatcher != NULL)
    	{
    		float LineLifeTime = (LifeTime > 0.f) ? LifeTime : LineBatcher->DefaultLifeTime;
    		
    		LineBatcher->DrawLine(StartPos, EndPos, FLinearColor::Red, 10, 0.f, LineLifeTime);
    	}
    }


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

    UFUNCTION(BlueprintCallable,Category="Damage")


  • 相关阅读:
    ubuntu16.04下笔记本自带摄像头编译运行PTAM
    ar的主流算法
    ubuntu下安装meshlab
    打开.py文件的方法
    Python_ip代理
    对书名的抓取
    JS动态增加删除UL节点LI及相关内容示例
    js遍历json
    js移除某一类的div
    工厂模式
  • 原文地址:https://www.cnblogs.com/liang123/p/6325871.html
Copyright © 2011-2022 走看看