モーション コントローラーの使用方法

モーション コントローラーでオブジェクトを拾う / 落とす操作方法

前提トピック

このページは以下のトピックへの知識があることを前提にしています。まず以下のトピックの内容についてご確認をお願いします。

UE4 プロジェクトにモーション コントローラーのサポートを追加すると、没入感およびリアリズムの水準をあげることができます。没入感およびリアリズムの水準を上げる方法の 1 つは、モーション コントローラーを使ってワールド内に置かれたオブジェクトを拾う機能の追加です。本ページでは、この機能を UE4 VR プロジェクトに対応させる方法を説明します。

モーション コントローラーの設定

次のセクションでは、レベル内に置かれたアイテムを拾う / 落とすことができるようにモーション コントローラーを設定する方法を説明します。

コンポーネント、変数、イベントの設定

イベントグラフへのノードの追加を開始する前に、コンポーネントと変数の作成と設定が必要になります。次のセクションで、必要なコンポーネントと変数、およびどのような設定項目があるのかを説明します。

コンポーネント / 変数タイプ

名前

Scene

HeldObjectLocation

X:38, Y:0, Z:0

Boolean

IsHoldingObject

false

クリックしてフルサイズで表示

Held Object Location に拾ったオブジェクトを置くので、必ず MC_Left が親になるようにしてください。

さらに、以下の名前で 2 つの カスタムイベント を作成する必要があります。

ノード名

PickUpObject

N/A

DropObject

N/A

HT_Using_Touch_06.png

Holding and Dropping of Items

Holding and Dropping of Items セクションは、オブジェクトを拾う / 落とす処理をする別のカスタムイベントを呼び出します。この操作を行うには、モーション コントローラーの左側のトリガーを押す、あるいは放します。ここで注意すべきことは、Branch 処理文でオブジェクトを 1 回につき拾うことができるオブジェクトを 1 つだけにしています。ユーザーが 1 回につき 1 つのオブジェクトしか拾えないようにするために、これは重要です。

Copy Example

HT_Using_Touch_00.png

画像の左上隅の [Copy Node Graph (ノード グラフをコピー)] オプションをクリックすると、このセクションのブループリント コードをコピーすることができます。

Pick Up Object Event

Pick-Up Object Event セクションは、拾うことができるオブジェクトを見つけ、それらを拾うためのロジックをすべて処理します。これは 1 つの関数ですが、2 つの部分に分かれます。では、その 2 つの部分について見てみましょう。

  1. Pick-Up Object Event の 1 つ目の機能は、拾うことができる要件を満たすオブジェクトをワールド内で見つけることです。その為に、ユーザーの左手用のモーション コントローラーからワールドに向けて前方向へ 1000 CM の光線をキャストします。この光線は、Object Type of Physics Body を持たないオブジェクトは無視するようになっています。

    Copy Node Graph

    画像の左上隅の [Copy Node Graph (ノード グラフをコピー)] オプションをクリックすると、このセクションのブループリント コードをコピーすることができます。

    テストの目的で、Draw Debug TypeDuration に設定して、光線をワールドにキャストできるようにしています。本番環境で使用する場合は、Draw Debug Type を必ず [None] に設定してください。

  2. Pick-Up Object Event の 2 つ目の機能は、見つけた拾う対象のオブジェクトにほどこす処理です。オブジェクトが見つかると、Break Hit Result ノードを使ってヒットした対象の詳細情報を取得します。この場合は、どのアクタおよびコンポーネントとヒットしたのかを調べています。次に、オブジェクト上で物理を無効にすると、そのオブジェクトは左手用のモーション コントローラーにアタッチされている Held Object Location にアタッチされます。最後に、変数 IsHoldingObject を true に設定して、それ以外のものは何も拾えないようにします。

    Copy Node Graph

Drop Object Event

Drop Object Event セクションは、拾ったオブジェクトを落とし、すべてをリセットするためのロジックを処理して別のものを拾うことができる状態にします。Drop Event はまず、ユーザーが持っているオブジェクトを落とすことが可能かどうかをチェックします。ユーザーが何かを持っていれば、そのオブジェクトはユーザーのモーション コントローラーからデタッチされ、物理を再度有効にしてオブジェクトがグラウンドに落ちるようにします。最後に、Hit Component 変数と Picked Up Actors 変数を前のデータからクリアして、次に拾ったオブジェクトが確実に保存されるようにします。

Copy Node Graph

ブループリントの完成

これでブループリントが完成しました。あとはワールドに拾うオブジェクトを幾つか追加するだけです。拾う対象のオブジェクトには物理ボディがあるはずなので、スタティックメッシュを幾つか追加して、それらの [Mobility (可動性)][Movable (ムーバブル)] に設定し、かつ [Simulate Physics] を必ず有効にしてください。

クリックしてフルサイズで表示

そしてワールドに VRPawn を置いて、[Auto Possess Player][Player 1] に設定し VR preview でプロジェクトを起動します。次に、Rift HMD を装着し、タッチコントローラーを持ちます。左手用のタッチコントローラーで拾うオブジェクトに正面から照準を合わせたら、トリガーを握ってオブジェクトを拾います。以下の動画は、トリガーを放してオブジェクトを落とし、別のオブジェクトを拾っています。

以下が完成したブループリントです。作成した VRPawn ブループリントがうまく機能しない場合はこれをコピー&ペーストして使ったり、別のプロジェクトでも使用することができます。ただし、新しいブループリントにコピーした場合、必要な変数とコンポーネントをすべて作成しなければならないことを覚えておいてください。

Copy Node Graph

画像の左上隅の [Copy Node Graph (ノード グラフをコピー)] オプションをクリックすると、このセクションのブループリント コードをコピーすることができます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル