今回は、2DRPGにおけるNPCに動き回る機能を実装したいと思います。
現時点では、正面を向けて配置した場所から移動することはなく、足踏みしているアニメーションだけ設定している状態です。
RPGでNPCをその場で動き回るようにする【Unity2D】
NPCのアニメーションを作成する
まずは、アニメーションの準備から行います。
NPCは、周辺を歩くだけですので、各方向に歩くアニメーションを4つ作ればOKですね。
こんな感じで「NPC_down」「NPC_up」等方向が分かりやすいものに名前にして4つ作ります。
私の場合1つの方向につき3枚のスプライトを使用しているのでSamplesを「4」に設定しています。自然なアニメーションにするには、2枚に配置しているスプライトを最後に持ってくると良いです。
Animator Controllerの設定
続いてAnimator Conrtollerの設定を行います。
今回は、Blend Treeを使って4方向のアニメーションをブレンドします。
Animator Controllerを開いたら右クリックして「Create State」→「From New Blend Tree」選択します。EntryがBlend Treeを向くようにBlend Treeを右クリックして「Set as Layer Default State」を選択します。
パラメータとしてFloat型でxとyを作ります。
Blend Treeを選択してMotionの下の「+」をクリックし「Add Motion Feild」を選択します。
Motionに先ほど作成したアニメーションを設定していきます。
Xは左右、Yは上下が基本なので、Xが1なら右へ、Yが1なら上に移動するようにします。それぞれの逆方向は-1にすれば良いですね。
アニメーションに関する準備は出来たので、NPCオブジェクトにAnimatorコンポーネントを付けて今作成したAnimator Controllerをセットしておきます。
Rigidbody2Dの設定
NPCは、Rigidbodyを使って移動させるので、Rigidbody2Dコンポーネントをアタッチします。
特別設定を変更する必要はありませんが、オブジェクトが衝突したときの事を気にかけて一応「Freeze Rotation」のZだけチェックを入れておきます。
NPCControllerスクリプトを作成する
最後に実際に移動させるNPCControllerスクリプトを作成します。
私自身も現在2DRPGを制作中であるため、fungusに関する処理などこちらの記事とは無関係な処理も含まれています。お手数ですが必要ない部分はコメントアウトするなり削除なりお願いします。
NPCが移動する方向は、4方向なので乱数を取得して、出た値によってSwitch文を使って移動させる方向のベクトルを指定します。
また、対応するアニメーションもここで指定するようにします。x方向にアニメーションをセットする場合は、Yの値を0にします。逆も同じですね。この処理を記述しておかないと、2つ以上のアニメーションが被ってしまい正しい方向のアニメーションが再生されません。
スクリプトを保存したらNPCにアタッチして何秒毎に方向転換を行うかを決める「Span」に秒数を入力してゲームを実行してみます。
うろうろしているおじいちゃんがNPCですね。1秒毎にアニメーションはそのままでNPCの動きを止めたい場合はコルーチンを使うと良いと思います。