CrossViewとは
こちらの記事をご覧ください。
はじめに
Unityは、2016年頃に少し触ったことがあったのですが、本格的に開発しようと思ったのは今回が初めてだったので、まずは「3Dモデルとアニメーション操作」から実装を学びました。
余談
ちなみに、2016年頃に~というのは、当時、ネットワークカメラで撮影した映像を人物検出のエンジンに食わせて、画面の中に人が何人いるか等を検出するシステムのお仕事に関わっていました。
その時、テスト用の映像として「人が歩き回る映像をUnityで作成しませんか?」という提案をお客さんにしたことがありました。
以下は、その時のサンプル動画です。
簡単なゲート的なものを人が通過するような場面を想定して作ってみました。
Unity的には、NavMeshで自動で歩かせているだけの単純な実装です。
Football_1
最初の実装は、
- サッカーフィールドのテクスチャを用意し、Sceneを構築する。
- Unity Asset Storeから、FREEの3Dモデルをダウンロードする。
- モデルデータは、忘れずに"Humanoid"型に設定しておく。
- Avatorデータも自動生成するように設定しておく。
- NavMeshで、フィールド上を周回するように実装する。
- 宇宙飛行士の3Dモデルの三人称視点でカメラ制御させる。
次に、
- Adobe Mixamoから、サッカー系のAnimationデータをいくつかダウンロードする。
- Animationデータも、忘れずに"Humanoid"型に設定しておく。
- Trigger系として使用するものは、LoopTime=OFFにする。
- AnimatorControllerを新規作成し、用意した変数の値によって状態遷移させる。
- 初期状態は、Idle(軽く揺れながら立った状態のアニメーション)とする。
- Bool型変数(Dash,Back,Catching)で、走ったり、後ずさりしたりと遷移させる。
- Trigger型変数(Pass,Tackle,Catch,etc)で、1-Shotアニメーションを発動させる。
- 各3Dモデルに、作成したAnimatorControllerを適用する。
- ApplyRootMotion=OFFにする。
さらに、
- AnimatorControllerにて、IK=ONにする。
- OnAnimatorIK()を実装したScriptを、各3Dモデルにアタッチする。
- OnAnimatorIK()では、Animator.SetLookAtWeight()およびSetLookAtPosition()で顔の向きを設定し、常に宇宙飛行士の方を向くようにする。
参考サイト
- https://kabaunity.com/animation-person/
- https://xr-hub.com/archives/10203
- https://ekifurulab.com/anystate/#toc10
- https://light11.hatenadiary.com/entry/2019/04/18/003100
- https://qiita.com/moe65/items/b40387f71514de0979df
WebGL version
操作方法は次の通り。
- WASDキー、または矢印キーで、宇宙飛行士を操作できます。
- マウスカーソルの移動で、宇宙飛行士の視線を動かせます。
- 次のキー操作でアニメーションを切り替えることができます。(GoalKeeper用の場合)
- Bool系
- 8:Dash
- 5:Idle
- 2:Back
- 1:Idle(Catching)
- Trigger系
- 7:Kick
- 9:Tackle
- 4:Dive Left
- 6:Dive Right
- 0:Catch
※Bool系は、一旦Idleに戻ってから別の状態に遷移させます。
※Trigger系は、Back状態では反応しないようにしています。
以上です。