UE4 射线拾取&三维画线
2016-07-01 14:01
447 查看
虽然有人建议UE4使用C++创建VR项目,能避免一些坑爹的错误,但是我用C++创建,竟然问题更多,还存在创建不了的情况,也不知道是不是我的操作问题,快疯了。
于是我还是选择了蓝图创建VR项目,但是...
可能是写代码习惯了,蓝图用着相当别扭,而且有些功能甚至没有,我也不知道,反正是没找到。
最后,折中,用C++来写部分功能,再在蓝图中调用,这里就写了应用在VR手柄上的一个射线拾取,为了让用户能更好的操作,我们需要将射线在场景中绘制出来。
射线拾取
三维画线
如果需要在蓝图中调用,只需要在函数声明的上面写一个标记
于是我还是选择了蓝图创建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")
相关文章推荐
- UE4 射线拾取&三维画线
- iOS与Android用户界面(UI)设计规范
- UINavigationController 学习摘要
- suite0001关于路由器
- 查看操作系统的UUID
- 查看操作系统的UUID
- 做开发,也要多一些UI设计上的思考
- 【jmeter】non-gui模式运行
- MySQL 参数autoReconnect=true 解决8小时连接失效
- 通过UICollectionView 自定义日历(Calendar)添加、编辑以及删除事件等操作
- easyui 进度条
- [改善Java代码]使用valueOf前必须进行校验
- Vue.js介绍
- Codeforces-687C The Values You Can Make
- Android中BuildConfig类的那些事<二>
- UEFI+GPT模式下安装win 10系统——生命不止,折腾不息
- iOS segue 跳转
- LeetCode357. Count Numbers with Unique Digits
- UICollectionView 基础全面解析
- IOS UIView--动画、圆角的拓展