さて今度はちょっぴりゲーム的要素を取り込んでみましょう。
今回はそれなりの作業量になります。
以下のページを参考に実施しますが、Unityに関してある程度の知識があることが前提の説明となっています。
【HoloLens開発】ユニティちゃんとHoloLensで戯れる - ゲームパッド編 -
http://bril-tech.blogspot.jp/2016/11/hololens-gamepad.html
特にUnityにおけるアニメーション実装の知識が必要です。
問題を複雑化しないためにも、いきなり現実世界にユニティちゃんを歩き回らせるのは止めておき、
まずは仮想空間をユニティちゃんが歩き回るゲームを実装してみます。
よって、今回はMRは全く関係のない。ただのUnityゲーム開発となります。
最初に紹介ページと同じプロジェクト環境を作ります。
・【HoloLens開発】ユニティちゃんとHololensで戯れる - 表示編 -
http://bril-tech.blogspot.jp/2016/09/hololenshololens.html
もし Holograms 101 のチュートリアルプロジェクトを作成済みであれば、AssetStoreからUnityChanのAssetをインポートしてprefabをセットするだけでもOKです。
準備できれば create内で右クリックを行い、3DObject->Planeから床を準備します。
SpetialMappingの代わりにこの床の上で動作を確認しようという魂胆です。
ですので、XboxOneController.csに含まれる以下のSpatialMappingに関する処理は一旦コメントアウトします。
XboxOneController.cs
//manager = GameObject.Find("SpatialMapping").GetComponent<SpatialMappingManager>(); //中略 if (showMesh) { // Wireframeを表示 //manager.SetSurfaceMaterial(Wireframe); } else { // Occlusionを表示 //manager.SetSurfaceMaterial(Occlusion); }
ユニティちゃんにコンポーネントとして追加して動きを見てみます。
床の上を歩きました…特に何の修正も不要でした。
ユニティちゃんは歩く場所を意識しないので当然ですが、こうスムーズに行くとほっとします。
紹介ページに「アイドル状態でもジャンプできるように修正しています」とありますが、
おそらく下記の修正を実施していると思われます。
Idle状態からJump状態にトランザクションを結ぶ。
このとき、Idle→Jumpの移行ではHasExitTimeをfalseにすること。
・【Unity】Animatorのモーション切り替えが即座に行われないときの対処
http://tsubakit1.hateblo.jp/entry/2015/07/23/233000
最終的にユニティちゃんは現実世界を動き回るので、今のままだとジャンプ力がありすぎます。
ジャンプモーションを「JUMP00B」に変更して現実的なジャンプ力に変更しました。
このとき、モーションだけでなく辺り判定も調整しておく必要があります。
0.5fを設定して再調整しています。
XboxOneController.cs
float adjCenterY = orgVectColCenter.y + (jumpHeight * 0.5f);
なお、JUMP00BモーションにはjumpHeight,GravityControlのカーブ設定がないので追加する必要があります。
この辺りは完全にユニティの知識です。自分は以下の動画で勉強しました。
・ゲームツクール! 第6回 Unity×Unity-Chanでアクションゲームをつくろう!
https://www.youtube.com/watch?v=Qp53ua4eSQQ
何だかMR以外のところを拘り始めてしまったので、ひとまずここで打ち切ります。
次は現実世界を歩かせてみます。