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")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神码编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值