【UnityC#講座】ユニティちゃんたちをドラクエっぽく一列に移動や順番変更させる【List、for文、NavMeshAgent】


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倍にしていますが別に意味はないのでしなくて大丈夫です。

ドラクエ移動/Plan

次は3人のモデルをそれぞれセットするのでProjectのAssetsからSceneかHierarchyにドラッグ&ドロップしてください。

Unity-chan > Models > unitychan

SapphiArt > SapphiArtchan > OBJ > SapphiArtchan

AxquireChan > Models > AcquireChan

キソラちゃんは影が出ないのはシェーダーの設定でそうなっているからですが、今回は構わず行きます。

ドラクエ移動/ユニティちゃん、キソラちゃん、アクワイアちゃん

あとキソラちゃんについているスクリプトは使わないのでチェックを外すか、

ドラクエ移動/キソラちゃんスクリプトオフ

そのスクリプトの左端の歯車マークからRemove Componentで取り除いてください。

ドラクエ移動/キソラちゃんスクリプトRemove Component

次はカメラを適当にPlan全体を見渡せるようにします。

ドラクエ移動/カメラを高く

ドラクエ移動/カメラTransform

キャラクターにアタッチするスクリプトを書く

まずProjectからC#スクリプトを出してください。
ユニティちゃんたちにアタッチするスクリプト「Move」を書き、これひとつで3人とも動かします。

Project > Create > C# Script

leadは先頭のキャラクターの操作を切り替えるためのものなのでまだ意味がありません。

できたら3人にそれぞれアタッチしてください。

順番を替えるスクリプトを書く

次は空のオブジェクトを出して「ChangeOrder」と名付けます。

Hierarchy > Create > Create Empty

名前は右クリック、Renameか、Inspectorから替えられます。

次はまたC#スクリプトを出しこれも「ChangeOrder」と名付けてください。

それをChangeOrderオブジェクトにアタッチし、InspectorのCharaのSizeに3と入れ、そしてキャラクターのオブジェクトをひとつずつ空欄に入れて行ってください。

ドラクエ移動/ChangeOrder/Inspector

そうすればスペースキーで順番が替わるようになります。

ドラクエ移動/順番変更

上手くできたでしょうか?

スポンサーリンク

■リーダーを移動させる

AnimatorControllerの設定をする

次はキャラクターのモーションを設定します。
AnimatorControllerを出してください。

Project > Create > AnimatorController

設定はこのようにします。

ドラクエ移動/Blend Tree/Parameters

罫線上で右クリックしてBlend Treeを作り、それをダブルクリックするとこの画面が出ます。
Blend Treeを作ると勝手にBlendというParametersができるはずですが、できていなければ作ってください。

ドラクエ移動/Blend Tree/State

それをクリックし、Inspectorから設定をします。
ParameterをBlendにし、Motionに+ボタンを押して2つ空欄を作り、そこに待機モーションと走りモーションを入れます。
こちらの画像はユニティちゃんのものです。

ドラクエ移動/Blend Tree/Inspector

設定の仕方はほとんどこちらの記事と同じなので細かいところはこちらをご参照ください。

【UnityC#講座】ユニティちゃんにキソラちゃんがついてくるようにする【NavMeshAgent、Blend Tree】

AnimatorOverrideControllerの設定をする

残り2人のキャラクターはAnimatorOverrideControllerを使うのでこれを2つ出してください。

Project > Create > AnimatorOverrideController

さきほどユニティちゃん用に作ったAnimatorControllerをセットし、それぞれの待機モーションと走りモーションをセットします。
これで新たに細かい設定をすることなくユニティちゃんと同じ設定になります。

キソラちゃん(SapphiArtchan)

ドラクエ移動/キソラちゃんのAnimatorOverrideController

アクワイアちゃん

ドラクエ移動/アクワイアちゃんのAnimatorOverrideController

参考
【UnityC#講座】AnimatorControllerを使いまわす【AnimatorOverrideController】

できたらそれぞれのキャラのAnimatorにAnimatorControllerないしはAnimatorOverrideControllerをアタッチしてください。

ドラクエ移動/Animatorに設置

操作のためのコードを追記する

次は先ほど書いたMoveスクリプトに追記します。

今回はWS↑↓キーで前後に移動し、AD←→キーで方向を替えます。

さて上手く動いたでしょうか?

ドラクエ移動/リーダー移動

動いたまま操作キャラ替えると走りモーションが止まりませんね(汗)
それは操作キャラから変更するとキー操作でのモーション変更を受け付けなくなるからですが、次の設定できちんとなるようにします。

■全員を移動させる

NavMeshAgentをつける

先頭以外のキャラクターはNavMeshAgentで動かします。
なので全員にNavMeshAgentコンポーネントを入れましょう。
特に設定は要りません。

ドラクエ移動/NavMeshAgent

PlanをBakeする

次はNavMeshAgentで移動できる範囲を設定します。
Navigationウィンドウを出してください。

Window > Navigation

ドラクエ移動/メインメニューのWindow

次はPlanのInspectorから、以下の画像右端のStaticの三角マークをクリックし、Navigation Staticを選択してください。

ドラクエ移動/Plan/Navigation Static

そしてPlanを選択したままNavigationウィンドウのBakeタブの底にあるBakeボタンをクリックします。

ドラクエ移動/Bake

そうするとSceneビューのPlanがこのように青い範囲ができているはずです。
これがNavMeshAgentを設置したキャラの移動できる範囲です。

ドラクエ移動/Bake後のPlan

追従者としてのスクリプトを追記する

さあ最後の仕上げに取り掛かりましょう。
MoveスクリプトにNavMeshAgentに関するコードを追記して出来上がりです。

「//」でメモした部分が追記するところです。
using UnityEngine.AI;を名前空間(クラスの外側)に入れるのを忘れないようにしてください。
NavMeshAgentはBool変数でFalseにしただけでは止まらないので止めるにはagent.isStoppedをTrueにする必要があります。
そしてanimator.SetFloatの第二引数がキー操作する時と違うことに注意してください。

さて、無事に一列に並んで移動できたしょうか?

ドラクエ移動/一列に並んで順番交替しながら移動

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

今回はこれで終わります。
お疲れさまでした。

■関連記事

【UnityC#講座】AnimatorControllerの使い方

【UnityC#講座】ユニティちゃんをモブキャラのごとくランダム移動させる【NavMeshAgent】

スポンサーリンク

目次に戻る