1. 程式人生 > >【雜記】UE4 C++抓取物體步驟

【雜記】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抓取物體了。

步驟寫的比較粗略,主要是我的一個學習小結,如果有問題歡迎來信。