【UE4】MotionControllerSampleを読んでみたメモ【Vive】
はじめに
おかずさんが公開しているMotionControllerSampleを読んでみたメモを 書いておきます
プロジェクトはこれ
近いうちにドキュメントを書いていただけるそうなので、個人的なメモだと思ってください
中身を読む
最初、中身は入り組んでるっぽいと思ったのですが、よく読むとオブジェクト指向な感じで出来てて勉強になるところが色々ありました
メイン
メインになるBP_PIControllerから
BP_PIController
TunrRate/LookUpRate MoveはどうやらHMDなしの時の操作の名残りみたいです
今はViveでテストするので放置されてるといったところですかね…
大事なのはこの辺ですよね
これそれぞれProjectSettingでMappingされてます
ViveのコントローラーもmotionControllerから取れるのでMappingしてあった#UE4Study pic.twitter.com/4j5IfMvj6i
— てんちょー (@shop_0761) April 1, 2016
UE4ではMotion Controller ComponentがOculus touchでもつかえるらしいです
そしてViveコントローラーではGrab/Release (時々Graped)は横についてるボタンに、Use/UnUseはTriggerボタンに対応しててBooleanで右か左か渡しています
これらは全てBPIF_HandsというBPInterfaceで定義された関数を呼んでるのでそっちを見に行きます
するとBP_PIHandsの中にありました
BP_PIHands
他の
- Release for Hands
- Use for Hands
- Unuse for Hands
も呼んでいる関数が違うだけでやっていることは同じなので省略します
でこのHandActorが何者かというとBP_PIHandsのHand_R(Hand_L)というChildActorComponentからSetされたものでした
でこれらのHand_R(Hand_L)はBP_PISingleHand Classからなるものです
ここに色々ありました! やっとみつけた!
BP_PISingleHand
要になりそうなTickから
PsysicsHandleを使って掴んだりするところはこちらを参考にするとスムーズかと思います
UpdateDebugTextは省略して、UpdateGrabTargetにいきます
GetnearestTargetで近くのものをgetしてきてそれが今持ってるGrabTargetActorと違ったら処理をするのはいいんですがその後の処理がThen1だけでいい気がするんですが…(おかずさん教えて下さい!
2016/04/07/23:56 追記
@shop_0761 UpdateGrabTargetの所は…それまでTagetだったActorに対して、もうあなたはTargetではないですよ、と通知したいのでThen 0の処理をしてる感じです。Targetにされてる側は光らせたり、輪郭線を書いたりする予定
— おかず@UE4+Viveおじさん見習い (@pafuhana1213) April 7, 2016
GetnearestTargetはこれ
でもってそこで使ってるHoldTargetsはここでaddされてます
掴めるものリストを作ってる感じですね
でTickのところにあったCollisionとCollsionRootのSetWorldRotationするところはどちらか片方でもいいような気がします…(おかずさん教えてry
2016/04/08/0:00 追記
@shop_0761 CollisionとCollsionRootのSetWorldRotationは…え、なにこれ、こわい
— おかず@UE4+Viveおじさん見習い (@pafuhana1213) April 7, 2016
で一通り終わったのでBP_PIHandsに戻ります
BP_PIHands
ここでやっと全体図をば
init上半分から
さっきちらっとで出てきたSetChildHandActorsとInitHandsです
InitHandsはこれ
これらはどうやらBP_PISingleHandにあるのでまた行きます
BP_PISingleHand
Set Is Debug
Debug用です おわり
Set Collision Param
ここで初めて知ったのがSetBoxExtentです
これすでにあるBoxCollisionのサイズを設定できるみたいで割と便利です
で、そのCollisionのLocationをセットしていますね
Setup Grab
これは先程出てきたPhysics Handle周りの設定なのでここは省略します
BP_PIHands
戻ってきました
さっきのSequenceの続き
MotionControllerを使うかどうかの分岐でした
とりあえずメインおわりましたー
BP_GrabTargetBase
ここからは実際に掴むもののBPにはいります
BeginPlayでは僕にとって面白いことをしていました
これです
こんな風に継承元BPでbindだけしておいて継承先BPで同名Eventで上書きしてるのか プログラム感あるなー#UE4Study pic.twitter.com/icBjTL6cAG
— てんちょー (@shop_0761) April 1, 2016
このBaseBPを継承してBPを作ると、予めイベントがbindされてるので継承先で同じ名前のイベントを作るとそっちのイベントが優先されるというプログラム的でいいなと思いました(たぶんこれで解釈あってるはず
BP_GrabTargetBase_StaticMesh
さっきのをベースに作られたStaticMeshのBPです
BeginPlay
Reset Materials
BaseEvent
ResetStaticMesh
でConstruction Script
とあまり説明する感じでもないですね…
SkeltalMeshもほぼ同様の内容でした
自分のプロジェクトで使う
2016/04/08 追記
思い出したように追記します
MotionControllerSampleフォルダを自分のプロジェクトにmigrate(移行)してきます
でそのついでにInputの設定も持って行きます
ProjectSettings->Engine->InputからExportしておきます (この時、特に何も考えず.iniファイルを保存すると、 MotionControllerSample-master\Saved\Config\Windows などに保存されるので見失わないように)
で、自分のプロジェクトでImportします
それからGameModeを持ってきたBP_GameModeに変更して、マップ上にこれらを配置します
でここにチェックいれないと上手くコントローラーが動かないので要注意
2016/04/09 追記
これで終わりかとおもいきやレベルに設置したBP_PICameraのここも設定してください(これでイベント取れなくて迷ってた
まとめ
概ねこんなところかと思います
間違ってる所があれば修正するので@shop_0761までお気軽に
ついでにViveはまだないとか、Sampleの中身見たけど読むの大変そうと思った方の役に立てばいいなと思いました