在这之前,我已经完成了设置射线的工作(通过函数DrawDebugLine)
绘制好射线之后,可以得到射线的起点位置(也就是DefaultPawn)和终点位置(通过向量加法)
关于射线检测的函数 可以参考博客:
http://blog.csdn.net/xiaozhi0999/article/details/78355610
大神写的非常详细。
然后就是用射线来抓取物体的实现步骤:
Step1:
获取两个Pawn中的组件:
PhysicsHandle和Inputcomponent
一个用来绑定物体,一个用来读取输入
将输入组件绑定到按键和事件Grab上,使用函数InputComponent->BindAction();
Step2:
填充Grab函数。
首先做射线检测,当检测到物体时,通过PhysicsHandle->GrabComponentAtLocationWithRotation函数绑定物体组件到Pawn的PhysicsHandle上。(注意:这里只是绑定,并没有改变被绑定组件的位置)
相应的,松开物体可以用如下判断:
if (PhysicsHandle->GetGrabbedComponent() != nullptr)
{
PhysicsHandle->ReleaseComponent();
}
同样需要提前将Release绑定按键和事件。然后在Realease函数中填充上面的判断。
Step3:
在Tickcomponent函数中每帧改变被绑定物体的位置
if (PhysicsHandle->GetGrabbedComponent() != nullptr)
{
PhysicsHandle->SetTargetLocation(GetLineEndPos());
}
这样就可以实现UE4抓取物体了。
步骤写的比较粗略,主要是我的一个学习小结,如果有问题欢迎来信。