VR内の視線の方向やコントローラーの向きを取得してキャラクターを移動させる

#はじめに
UnrealEngine の VRテンプレートの MotionControllerMap をベースにしてVR内の視線の方向やコントローラーの向きを取得してキャラクターを動かす方法のまとめです

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">やりたかったのはこれです<br>常に視界に割り込んでくる！かまってちゃんな金鯱😊 <a href="https://t.co/ozIunhugIl">pic.twitter.com/ozIunhugIl</a></p>&mdash; reisyu (@reisyu1) <a href="https://twitter.com/reisyu1/status/1233587153541615617?ref_src=twsrc%5Etfw">February 29, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

キャラクターを動かす方法は「[Unreal Engine 4 アクションゲーム ブループリント入門](https://www.shuwasystem.co.jp/book/9784798055909.html)　第6章 敵キャラクターを作る」で学んだ方法です
視線の方向を取得する方法は TARK（@LideTark）さんにアドバイスをいただき完成しました。ありがとうございます！

#環境
UnrealEngine 4.24.3　VRテンプレートのMotionControllerMapを使用
Oculus Quest　13.0.0.298.463.195755071

#作成方法
##キャラクターを作る
Character クラスの BPアクターを新規作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/e290234b-4da5-9578-0d82-ec922b7496bd.png)

作成したBPを開いて Mesh を選択しキャラクターの外観を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/399b1aa8-63a5-764a-2312-3e848e5acd28.png)

`CapsuleComponent` の `Capsule Half Height` や `Mesh` の `Location Z` を調整して位置・大きさを合わせます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/6b7df62c-b22e-14bd-ec00-4e475032eb86.png)

##カメラをの位置を取得する
`Get Player Pawn` > `Cast to MotionContorollerPawn` とつなぎ `As MotionontorollerPawn` ピンから引き出して`Get Camera`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/7b063d45-150a-e21d-d12d-af298cb271f3.png)

##カメラをの向きを取得する
取得した Camera から `Get World Transform` > `Break Transform`  > `Get Forward Vector` で視線の向きを取得できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/34d67285-e7e5-c111-0e94-c490fe131161.png)

##視線の向いている方向にキャラクターを移動する
下記のとおりです
詳しくは「[Unreal Engine 4 アクションゲーム ブループリント入門](https://www.shuwasystem.co.jp/book/9784798055909.html)　第6章 敵キャラクターを作る」をご確認ください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/b64c1ea8-ccb5-5be8-a240-cf6e558f4a49.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/f30ece7e-a509-1ebd-974d-f2d82a9f0f98.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/a4144c7f-c79e-ae25-2ba7-5eae1f346571.png)

##視線ではなくハンドコントローラーの向きを取得する方法
`Cast to MotionContorollerPawn` の `As MotionontorollerPawn` ピンから引き出して`Get Left Controller`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/4da65663-77b5-665d-4fef-7e861b42978c.png)
`Left Controller` ピンから引き出して`Get Hand Mesh`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/c4bf1e9c-4a7a-1000-70bd-90080fa9ab8c.png)
`Camera`の代わりに`Hand Mesh`を`Get World Transform`につなげる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/4d56a6c7-4317-f563-a3b4-451840cfe681.png)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今度は手の向きにあわせてうごく素直な金鯱！<a href="https://twitter.com/hashtag/Blender?src=hash&amp;ref_src=twsrc%5Etfw">#Blender</a> <a href="https://twitter.com/hashtag/UE4?src=hash&amp;ref_src=twsrc%5Etfw">#UE4</a> <a href="https://twitter.com/hashtag/OculusQuest?src=hash&amp;ref_src=twsrc%5Etfw">#OculusQuest</a> <a href="https://t.co/Z9rRYCntsM">pic.twitter.com/Z9rRYCntsM</a></p>&mdash; reisyu (@reisyu1) <a href="https://twitter.com/reisyu1/status/1233681852503748609?ref_src=twsrc%5Etfw">February 29, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#まとめ
VR内で自分の動きに反応してキャラクターが動いてくれるのがカワイイ:heart_eyes:
今後は移動するだけじゃなくてさらに色々なアクションを付け加えていきたいです！

#参考
「[Unreal Engine 4 アクションゲーム ブループリント入門](https://www.shuwasystem.co.jp/book/9784798055909.html)