IshidaGames【UnityC#講座】ユニティちゃんたちをドラクエっぽく一列に移動や順番変更させる【List、for文、NavMeshAgent】Tweetnoteで管理人イシゲーのゲームの思い出記事を100円で公開しました。今回はユニティちゃんたちを一列に並んで移動させるようにします。スペースキーで順番がひとつずつ変わるようにします。私にとって一列に並んで移動と言うとドラクエを連想するのですが、ドラクエ10、11ではフィールドでは一人しか表示されないようになって少し寂しいものです・・・それはそれとして(笑)、今回はList、for文、NavMeshAgentを使ってシステムを作っていきます。■順番を替えるキャラクターを用意する今回使うのはこの3体です。modelも使いたかったのですがAnimatorControllerに対応していなかったので断念しました。アニメーションクリップがAnimatorControllerで使えず、他のアニメーションクリップを使おうにもAnimatorコンポーネントに入れるAvatarがありませんでした。次は土台になるPlanを入れましょう。Plan歩き回りやすいようにサイズを2倍にしておきます。おっと、Y軸も2倍にしていますが別に意味はないのでしなくて大丈夫です。次は3人のモデルをそれぞれセットするのでProjectのAssetsからSceneかHierarchyにドラッグ&ドロップしてください。AcquireChanキソラちゃんは影が出ないのはシェーダーの設定でそうなっているからですが、今回は構わず行きます。Componentで取り除いてください。次はカメラを適当にPlan全体を見渡せるようにします。キャラクターにアタッチするスクリプトを書くまずProjectからC#スクリプトを出してください。ユニティちゃんたちにアタッチするスクリプト「Move」を書き、これひとつで3人とも動かします。Scriptleadは先頭のキャラクターの操作を切り替えるためのものなのでまだ意味がありません。できたら3人にそれぞれアタッチしてください。順番を替えるスクリプトを書く次は空のオブジェクトを出して「ChangeOrder」と名付けます。Empty名前は右クリック、Renameか、Inspectorから替えられます。次はまたC#スクリプトを出しこれも「ChangeOrder」と名付けてください。それをChangeOrderオブジェクトにアタッチし、InspectorのCharaのSizeに3と入れ、そしてキャラクターのオブジェクトをひとつずつ空欄に入れて行ってください。すればスペースキーで順番が替わるようになります。上手くできたでしょうか?スポンサーリンク■リーダーを移動させるAnimatorControllerの設定をする次はキャラクターのモーションを設定します。AnimatorControllerを出してください。AnimatorController設定はこのようにします。Treeを作り、それをダブルクリックするとこの画面が出ます。Treeを作ると勝手にBlendというParametersができるはずですが、できていなければ作ってください。それをクリックし、Inspectorから設定をします。ParameterをBlendにし、Motionに+ボタンを押して2つ空欄を作り、そこに待機モーションと走りモーションを入れます。こちらの画像はユニティちゃんのものです。設定の仕方はほとんどこちらの記事と同じなので細かいところはこちらをご参照ください。Tree】AnimatorOverrideControllerの設定をする残り2人のキャラクターはAnimatorOverrideControllerを使うのでこれを2つ出してください。AnimatorOverrideControllerさきほどユニティちゃん用に作ったAnimatorControllerをセットし、それぞれの待機モーションと走りモーションをセットします。これで新たに細かい設定をすることなくユニティちゃんと同じ設定になります。【UnityC#講座】AnimatorControllerを使いまわす【AnimatorOverrideController】できたらそれぞれのキャラのAnimatorにAnimatorControllerないしはAnimatorOverrideControllerをアタッチしてください。操作のためのコードを追記する次は先ほど書いたMoveスクリプトに追記します。今回はWS↑↓キーで前後に移動し、AD←→キーで方向を替えます。上手く動いたでしょうか?動いたまま操作キャラ替えると走りモーションが止まりませんね(汗)それは操作キャラから変更するとキー操作でのモーション変更を受け付けなくなるからですが、次の設定できちんとなるようにします。■全員を移動させるNavMeshAgentをつける先頭以外のキャラクターはNavMeshAgentで動かします。全員にNavMeshAgentコンポーネントを入れましょう。PlanをBakeする次はNavMeshAgentで移動できる範囲を設定します。Navigationウィンドウを出してください。Staticを選択してください。Planを選択したままNavigationウィンドウのBakeタブの底にあるBakeボタンをクリックします。するとSceneビューのPlanがこのように青い範囲ができているはずです。これがNavMeshAgentを設置したキャラの移動できる範囲です。追従者としてのスクリプトを追記するさあ最後の仕上げに取り掛かりましょう。MoveスクリプトにNavMeshAgentに関するコードを追記して出来上がりです。「//」でメモした部分が追記するところです。UnityEngine.AI;を名前空間(クラスの外側)に入れるのを忘れないようにしてください。NavMeshAgentはBool変数でFalseにしただけでは止まらないので止めるにはagent.isStoppedをTrueにする必要があります。animator.SetFloatの第二引数がキー操作する時と違うことに注意してください。今回はこれで終わります。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。