G-Child 2020/06/01 13:00

【Unity】ハイブリッドな移動制御でプレイヤーを動かそう【スクリプト配布】

どうもどうも。G-Childだよ。

前回の更新でプレイヤーキャラクターのモデリングがひと段落したんで
ここ数日はプレイヤーの挙動回りを色々作業してたんだ。

だから今回はキャラクターの移動方法について記事にしてみようと思う。
他の初心者向けHowToと一味違うポイントは以下の2つだ。

  • 移動値はアニメーション制御、回転値はスクリプト制御
  • モーションの補間には2Dのブレンドツリーを活用

この方法の良い所は、スクリプトの分量をそこそこ抑えつつも、それなりに表現力の高いプレイヤー移動が作成できる点かな。
デメリットは、相応のアニメーション数(今回は4つ)を作らないといけない点。

では前回、超・無料プランの会員向けに公開した動画で実際にキャラクターが動いている様子を確認してみよう。

体の中心軸で機械的に旋回するのではなく、旋回の強さによって体が傾いていたり、減速や停止時に足の滑りが抑えられているんだ。
じゃあ、実際にどうやって作ったかを説明していくね。

今回の方法に限らず最初に抑えておくポイント

なにはともあれ、まずはプレイヤーとなる3DモデルをUnity上にインポートする必要があるよね。
モデルのインポートについては公式マニュアルを参照してね
シーンのHierarchy上置かれたプレイヤーモデルの移動を制御するために、以下のコンポーネントを接続するよ。


Animator アニメーションのコントローラ
Rigidbody 物理制御
Character Controller キャラクター制御
Player Controller(Script) 移動制御用に今回作成するスクリプト

今回紹介する移動制御用スクリプト(以降:Player Controller)は、超・無料プランの会員向けにDL出来るようにしておくので、今回の記事により深い興味が沸いた人は会員登録よろしくね。

移動値はアニメーション制御、回転値はスクリプト制御

Player Controllerでは回転の制御は行っているけど、移動値はキーの入力値をそのままアニメーションコントローラに渡しているんだ。
つまり、アニメーションを作るときにルートノード(一番の根本の骨)に移動値が入れておき、その値をキャラクターの移動値として利用するのね。
ルートノードのアニメーションについて

ルートノードのアニメーションを使う時に注意する3つのポイント
1.プレイヤーモデルのリグ設定で、Root nodeを設定しておく


2.各アニメーションのRootTransformPosition(XZ)は、Root Node Positionにしておく

3.プレイヤーのAnimator設定でApply Root Motionにチェックを入れておく

回転値は、入力方向とプレイヤーが向いている方向から旋回角度を求め、それが右回転なのか左回転なのかを外積を使って求めているよ。
求めた角度はアニメーションコントローラに渡してモーションの補間に活用するんだ。

キャラの向き自体はクオータニオン補間で回転させているよ。

transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 10.0F * Time.deltaTime);

モーションの補間には2Dのブレンドツリーを活用

前の項目でも言った通り、プレイヤーの移動値はルートノードのアニメーションを利用しているんだ。
でも単純に待機と走りのアニメーションを遷移図で繋いだだけでは、表現力が低いから2Dブレンドツリーを活用しているよ。


2Dの縦軸はSpeed(キー入力の強さ)、横軸はAngle(スクリプトで求めた旋回角度)で、Angle:0、Speed:1で直進、Angle:-1で左旋回、Angle:1で右旋回、Speed:0で足踏みが再生されるんだ。

こうすると、アナログスティックによる入力でも足が滑りにくくなるよ。

そうそう、左旋回・右旋回と言っても斜めに傾斜しながら真っすぐ走っているモーションだから注意が必要だよ。
あくまでプレイヤーの回転自体はスクリプトで制御しているからね。
その辺は足元の精密さよりも操作性やニュアンスを重視した結果だね。

というわけで、今回はプレイヤーの移動制御について色々と書いてみたよ。
もしも質問があったら、コメント欄までよろしくね。
後、繰り返しになるけど、今回紹介したPlayer Controllerは、超・無料プランの会員向けにDL出来るようにしておくので、今回の記事により深い興味が沸いた人は会員登録よろしくね。

フォロワー以上限定無料

移動用制御スクリプトを配布中

無料

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索