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