自作ゲームリメイク中-モーション編-(Unity制作)
今回はモーション編です。(動画は前回と同じです)
自作ゲームリメイク中-CharacterMotor編-(Unity制作) - Redhuのゲーム開発Fragments
操作とキャラクター(メカ)のモーションをどのように連動させているか説明していきます。
モデル及びモーションはBlenderを使って制作しています。
モーションそれ自体の作り方などはここでは説明しないのであしからず。
とりあえず動かすために用意したモーションが以下。
以上17モーション。これらのアニメーションクリップを組み合わせて動きを作り上げます。
Animator
Unityでアニメーションを組み立てるにはAnimatorを使います。
Animator Controllerというものを作成し、クリップを配置してそれぞれの遷移条件を決めることで、キャラの動きの設定が出来上がります。
上図がAnimator Controllerの画面。プレイが始まったらEntryから繋がるステートが再生され始めます。あとは矢印で繋がったステートへ遷移条件が満たされた時に再生箇所が移動します。
図の左側がParameter。遷移条件に使う数値やブール値などです。スクリプトから
Anim.SetTrigger ("OnJump");
などを使って操作することでアニメーション遷移を操ります。
前後左右ぶんをそれぞれ用意した歩きモーションなどは、アニメーションブレンドを使って一つにまとめます
パラメーターの数値にしたがって、配置したモーション同士が混ざり合って自然に歩いてくれるようになります。
歩きモーションは左右への移動が前進のものと後退のものの2種類あります。
前後の移動力(Speed)パラメーターによって再生させるバージョンを変えています。ブースト移動はそういうの無しなので単純に一つのブレンド。
パラメーターの操作は、アニメーション制御用のスクリプトを一つ新たに作成し(PlayerAnim)、FPSインプットコントローラーやキャラクターコントローラーから情報を引っ張ってきて、Animatorのパラメーターに連動させています。
他のスクリプトからAnimatorのパラメーターを直接弄ることはせず、あくまでPlayerAnimがパラメーター操作をつかさどります。あとからややこしくならないように。
リメイク中のゲームでは機体は3種の移動状態があります。
- 歩き状態(エネルギーの回復が速い)
- ブースト状態(空中でも移動できる)
- オーバーブースト状態(エネルギーを消費して高速移動)
移動力や加速力が変わるので、これらの状態はPlayerStatusスクリプトで管理しています。
FPSInputControllerスクリプトがブーストボタンや方向キーなどの入力に応じてPlayerStatusの状態を変化させます。
PlayerStatusは現在の状況に応じて機体の性能(CharacterControllerのパラメータ)を変化させます。
PlayerAnimはPlayerStatusの情報を見張って、アニメーションパラメータを変動させます。
CharacterControllerは状況に応じてSendMessage("OnLand");などを発生させているので、PlayerAnimにそれらを受け取りTriggerを操作する関数を用意しておきます。
っと言った感じでキャラの操作とアニメーションを連動させています。
機体が攻撃や射撃モーションを必要とする段階になったら、AnimatorのLayerやAvatarMaskなども弄ることになりますが今はここまで。
Animatorに関して、というよりも自分がどういうふうに組んでるかって感じの記事でしたが。
次回は、カメラ操作についてかな?