ごりです。
今更ですが、
UnrealEngine4のVer.4.13からVRテンプレートが追加されたので、
Viveでやってみました。
興味があった物を掴む処理の中身見ていきたいと思います。
まず入力のところから
プロジェクト設定-インプット を見ると、
トリガーを使うみたいです。
次にこの入力イベントを呼んでいる
コンテンツ-VirtualRealityBP-Blueprintsの中にある
「MotionControllerPawn」を見てみます。
アクションイベントを呼び出すと
コンテンツ-VirtualRealityBP-Blueprintsの中にある
「BP_MotionController」内の「GrabActor」「ReleaseActor」という関数を
呼び出しているみたいです。
この2つの関数が物を掴む、離す処理っぽいです。
まず「GrabActor」関数から
「WantstoGrip」という変数は手のアニメーションを握る状態か開く状態かを
使用する変数みたいで、
Trueの時に握って、Falseの時に離すようです。
次に「GetActorNearHand」関数は手に一番近いアクターを取得します。
しかしこの「GetActorNearHand」関数は
コンテンツ-VirtualRealityBP-Blueprints の中にある
「PickupActorInterface」というインターフェースを実装した
アクタークラスのみを取得するみたいです。
インターフェースについてはこちらの記事がすごくわかりやすいです。
アクターが取得出来たらリファレンスを保持して「PickUp」関数を呼び出ています。
この「Pickup」関数はアクター側の掴まれたときにどうするかの
処理になっていますね。
コンテンツ-VirtualRealityBP-Blueprints の中にある
「BP_PickupCube」がこのインターフェースを実装しているみたいなので
中身を見てみると、
アクターの物理シミュレーションを止めて、BP_MotionController に取り付けているようです。
「PickupActorInterface」を実装したアクターにこの処理をかけば、物が掴めるようになりそうですね。
次は「ReleaseActor」関数の中身です。
手の情報と掴んでいるものが取り付けられている親の情報が一致したときに
インターフェースの「Drop」関数を呼んでいるようです。
物理シミュレーションを再開し、親から外す処理のようですね。
以上がテンプレートの中の物を掴む処理となっています。
物を追加したいときは「BP_PickupCube」を複製してMeshを変えたら手っ取り早くすみます。
ただ「BP_PickupCube」は親クラスがStaticMeshActorになっているので
スケルタルメッシュを使いたい場合は親クラスがSkeltalMeshActorかアクター
にしてください。
試しに椅子を追加してみました。
UE4.13のVRテンプレートいじって椅子追加してみた pic.twitter.com/3adMwg9JO6
— goolee (@goolee07) 2016年10月29日
初投稿なのと、自分で考えてやっているのでおかしなとこあれば
コメントください。
次回はVR空間で弓矢を打てるようにしたいと思います。