【Unity】ゾンビゲー作成(敵キャラクター)

今回は敵キャラの作成です。

使った3Dモデルは

assetstore.unity.com

 

まだちゃんと中身は見れていませんがかなりいろいろ揃っている模様です。

 

今回は敵キャラの移動条件を明記したいと思います。

・追いかけるときは障害物をちゃんと避ける(プレイヤーに向かって移動するとき壁に向かって歩いてほしくない)

・プレイヤーを見つけていないときはうろうろする

・プレイヤーを見つけたら死ぬまで追いかけてくる

倒したとかの判定は今後やるとしてとりあえず移動に関してはこれで終わらせようと思います。

上記に関しては

・追いかけるときは障害物をちゃんと避ける

→ナビゲーション機能で移動させると障害物を避けるらしい

・プレイヤーを見つけていないときはうろうろする

→発見・未発見のトリガーをつくり未発見はランダムに目的地設定して移動

・プレイヤーを見つけたら死ぬまで追いかけてくる

→発見時はプレイヤー(目的地)にあたるまで追いかける

こんな感じで何とかなりそうです。

 

 

 

 

まずナビゲーションなのですが他でも記事は多くあると思いますので簡単に説明します。

これを使うとなんと指定した目的地に向かって指定した範囲を、障害物を避けながら移動させることができます。

ゲームで例えるとlolとかでプレイヤーを壁の向こうに移動させるとき目的地にむかって壁を避けつつ最短距離を移動しますよね?そんなイメージだと思います。

 

目的地やスピードはスクリプトで設定できるのですが、移動できる範囲は指定しないといけません。

①window→AI→Navigationを押してナビゲーションタブを出す

②マップのstaticをすべてNavigationStaticにしましょう。

マップ類のオブジェクトをFieldという空のオブジェクトに入れていたのでこれですべてをNavigationStaticにできました。(ナビゲーションの計算のみ行うという意味ですかね?)

f:id:graphicalpoxy:20190306221040p:plain

 

③移動できる範囲を指定

f:id:graphicalpoxy:20190306221327p:plain

 

それができたら次はインスペクターのタブのとこに追加Navigationというタブが追加されているのでそれを押して次にBake→Bakeを押します。

すると上の写真のように水色の部分が出てくると思います。それが移動範囲となります。

細かなパラメータに関しては他の人が説明してたりするので割愛しますが、Agentの半径や高さは動かしたいキャラのことを表しているようです。そして移動できる勾配、高さも設定できるようです。行ってほしくないところが範囲になっているようでしたらここらへんのパラメータをいじると改善すると思います。

 

 

 

これで一通りの設定が終わっているはずなのでスクリプトを作成していきます。

書くのが面倒になってきたのでどういうことをしたか書いときます。

ナビゲーションは目標地点設定してうごかす方法になります。

したがって場合を分けて目標を設定することで敵キャラの移動条件を満たして意向と思います。

 

 

未発見時

・Ramdom関数で目標座標をつくって移動

・近づいたら新たな目標地点を作成

これでループして永遠にうろうろしてます

 

発見時

・目的座標をplayerに設定

 

これで動き自体はいいのですが、発見と未発見を変更する必要があります。

そのために発見用トリガーを作成します。

・検知範囲として敵キャラにShereを追加(メッシュレンダーを切る、Colliderをつける+IsTriggerをチェック)

・衝突判定をつけて範囲内にプレイヤーがいるとトリガーオン(findtrigger というのをbool型で作成しtrueにする)

 

移動にはNavigationAgentのコンポーネントを追加しておいてくださいね

これで敵キャラクターを当初目標のように動かすことが出来たと思います。

 

次回は空爆を作っていこうと思います。