UnityでTPSを作る キャラクターの移動編

すでにキャラクターをSceneビューへ配置済みの状態から、アニメーション付きで移動させる方法を解説していきます。

なお、キャラクターを表示させる方法については以下の記事にまとめています。
UnityでTPSを作る キャラクターの表示編

 

必要なもの(アセット)

キャラクターを動かすには、大きく分けて4つのアセットが必要です。

 

キャラクターオブジェクト

当然ながら、動かす対象となるGameObjectが必要です。動かすには様々な条件を満たす必要がありますが、詳細は後述します。

今回はUnityちゃんを使って解説します。

 

 

アニメーション

アニメーションファイルが無いと、当たり前ですが動かせません。簡単な移動だけならUnityちゃんのパッケージに同梱されているので、今回はこれを使います。

 

なお、TPSにおいては平行移動(視線はそのまま左右へカニ歩き)も必要になりますが、その際は有料のアセットを探す必要があります。
アサルトライフルとハンドガンのみですが、以下のアセットが安価で使いやすいです。

古いアセットですが、使用するのはアニメーションファイルのみなので、Unityのバージョンに左右されません。僕は2016年に買いましたが、未だにお世話になっています。

 

 

AnimatorController

アニメーションをどのように切り替えるかを指示するファイルです。Scriptだけで管理してもいいのですが、AnimatorControllerを使用したほうが視覚的に分かりやすいです。

 

 

スクリプト

苦手な方も多いかと思いますが、どうしても書かざるを得なくなります。

 

 

 

AnimatorControllerを作成する

どれから始めても大差ないのですが、まずはAnimatorControllerから作ってみましょう。

 

AnimatorControllerファイルを新規作成

  1. Projectビューで右クリックし、Create > AnimatorController を選択
  2. 作成されたファイルにPlayerMove など分かりやすい名前をつける
  3. Animatorウィンドウに移動し(無い場合は上部のWindowメニューから)、AnimatorControllerを表示させる

 

こんな画面が表示されるはずです。

 

 

 

移動用のパラメータを設定

次に、移動用のアニメーションの切り替えを実装していきます。今回は、Blend Treeを使います。アニメーションの終了に関係なく、数値に応じて流動的にアニメーションを切り替える実装の際に活躍する機能で、数値に応じてアニメーションをブレンド(合成)するのが特徴です。

 

 

先に、Blend Treeで使うパラメータを作成しましょう。

  1. 左上のParametersを選択
  2. +ボタンを押す
  3. Floatを選択

 

 

これを2回繰り返し、パラメータ名をそれぞれ x, y にします(後にスクリプトでも使うので分かりやすい名前を)。

 

 

 

Blend Tree の作成

Blend Treeを作成します。右クリック > Create State > From New Blend Tree を選択。

 

 

作成されたBlend Treeをダブルクリックすると、Blend Treeの編集画面に移動します。(戻るには上部のBase Layerをクリックします)。

 

 

灰色のBlend Treeのボックスを選択した状態でInspectorビューを表示させ、Blend Typeを 2D Simple Directionalへ変更します。
上下左右のシンプルな切り替えで使う規格です。

 

 

Parametersの項目が出現するので、片方をyへ変更します。先ほど設定したパラメータです。
この2つの値を参考に、アニメーションを切り替えますよという設定ですね。

 

 

Motionの項目で+ボタンを押し、Add Motion Field4回選択してください。

 

 

こんな感じになるはずです。上下左右で4つ分のアニメーションを登録するので、4回作成したわけです。

 

 

Pos X と Pos Y を次のように設定しましょう。上図のひし形アイコンが、きれいに上下左右へ移動するはずです。
スティック入力がこの値に近づいたら、対応するモーションに切り替えてくれという設定です。

後々、スクリプトからスティック入力を読み取って、AnimatorControllerで設定したパラメータ「x」「y」へ値を渡すことで、アニメーションが切り替わるわけですね。

ただ、まだ何もアニメーションを指定していないため何も起きません。アニメーションを指定しましょう。

 

 

アニメーションの指定は、Motionの対応する項目の◎アイコンをクリックすることで指定できます。アニメーションファイルが多い場合は、検索欄にファイル名の一部を入力すると絞り込みができます。また、Projectビューから直にドラッグ&ドロップで指定することもできます。

どの項目がどの方向か分からない場合は、上図のひし形アイコンをみましょう。対応するひし形が強調されます。
上の画像の例だと左なので、左方向へアニメーションするファイルを指定します。

 

 

 

最終的に、こんな感じになればOK。
※Unityちゃんに同梱されているアニメーションは、後方へ走るものが無かったため、歩くアニメーションで代用しています。

これでAnimatorControllerの作業は終わり……と言いたいですが、待機状態のアニメーションを指定していません。

 

 

もう一度 Add Motion Fieldを押し、x, y = 0, 0 に設定して待機アニメーションを指定しましょう。何も入力がない時、このアニメーションが再生されます。

ちなみに、この方法で待機アニメーションを指定すると、動きによっては半端にスティックを倒した際に変な移動になります。例えば、体を回転させながら待機するアニメーションの場合、Unityちゃんが回転しながら走り出します。

これは、Blend Treeがアニメーションの切り替えではなく、アニメーションの合成をしているためです。スティックを左に0.5だけ倒した場合、待機アニメーションと左走りが半々の比率で合成されるわけです。

今回指定したWAIT00は、棒立ちモーションなのでこの現象が起きませんが、もし凝った待機アニメーションを指定したい場合は、Blend Treeから切り離して指定する必要があります(今回は割愛しますが、AnimatorControllerの基礎的な使い方を調べればいくらでも出てくるはずです)。

 

さて、AnimatorControllerでだいぶ尺を取られましたが、残りの作業はそんなに多くないので、ちゃっちゃと書いていきます。

 

 

 

スクリプトを書く

みんな大好きスクリプト。大丈夫、こちらで用意しておきました。下記のスクリプトを丸々ダウンロードしてProjectにぶっこみ、Unityちゃんにアタッチしてください。注釈付きなので大体わかると思いますが、もし不明な点があればコメントにてお気軽に質問してください。

 

 

 

キャラクターとなるGameObjectの編集

Sceneビューへ置いたUnityちゃんを編集していきます。HierarchyビューでUnityちゃんを選択し、Inspectorビューを表示させます。

 

 

  1. 先ほどのPlayerMove.cs をアタッチ(自動でRigidbodyがアタッチされます)
  2. AnimatorのControllerに、先ほど作ったAnimatorを指定
  3. 正しいAvatarが設定され、Apply Root Motionのチェックが外れていることを確認
  4. RigidbodyのUse Gravityのチェックを外す

 

補足しますと、Apply Root Motionは、アニメーションそのものに座標の移動処理がついていた場合、それを反映するオプションです。今回はスクリプトから移動を制御しているので、チェックを外します。

Use Gravityは、文字通り重力をUnityちゃんに反映するオプションです。チェックを入れると、Unityちゃんが奈落へ落ちます。道路やUnityちゃん本体へ当たり判定をつけてもいいですが、今回は割愛します。

 

 

 

完成!

おめでとう、完成です! デバッグボタンを押してゲームを再生すれば、WASDキーで上下左右へUnityちゃんが移動します。

 

 

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください