【雜記】UE4 C++抓取物體步驟
在這之前,我已經完成了設定射線的工作(通過函式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抓取物體了。
步驟寫的比較粗略,主要是我的一個學習小結,如果有問題歡迎來信。