Unity研究所<Unityによるゲーム開発、映像開発>

Unity初心者40代後半中年中間管理職おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

➂ゾンビの徘徊、プレイヤーの追跡 その1 一定の区間を自動に徘徊

今回から数回にわたり、敵キャラであるゾンビの動作の実装方法について解説する

  

f:id:Harukichi:20190804231020g:plain

 

〇ゾンビの動作の概要

 ゾンビは大まかには下記のような動作を行うので、それぞれについて分けて解説していく

 

 

  1.  一定の区間を自動に徘徊
  2. プレイヤーを見つけるとプレイヤーの追跡を開始、プレイヤーを見失うと、また元の徘徊モードに復帰
  3. プレイヤー追跡モードに入ると、ゾンビは通常の歩くモーションから、スピードも上げながら走り出す
  4. プレイヤーの一定距離に入るとプレイヤーを襲うモーションを行う

 

 

1 一定の区間を自動に徘徊

 ゾンビを自動で徘徊させるには、UnityのNavMashを使用する

 

 〇ポイント

ア 徘徊させるマップの情報をつく更

イ 徘徊させたいオブジェクトに目的地と進むスピードなどを設定する

 

ア 徘徊させるマップの情報をつくる

 

f:id:Harukichi:20190811103316p:plain

 情報が設定された状態のイメージ 

 水色部分が動ける範囲 

 

〇操作方法

f:id:Harukichi:20190811104703p:plain

  1.  メニューからWindow-AI-Navigationを選択
  2. するとNavMeshがプロジェクト内に作成され、Navigationのウインドウが表示される

    f:id:Harukichi:20190811105754p:plain

  3. 地形の情報を書き込む=BAKEするために、地形用のオブジェクトをStaticに設定

     

    f:id:Harukichi:20190811110303p:plain

  4. Navigationのウインドウに切り替え、Bakeのボタンを押すと、移動可能なエリア情報が作成される

 

イ 徘徊させたいオブジェクトに目的地と進むスピードなどを設定する f:id:Harukichi:20190811114119p:plain

    1. まずは徘徊させたいゲームオブジェクトを選択しAdd ComponentをクリックしてにNav Mesh Agentコンポーネント選択して追加 

       

      f:id:Harukichi:20190811114642p:plain

    2. 次に上記のようなスクリプトを追加する

              スクリプトは、Unityのマニュアルに載っているものをほぼそのまま使用

        上記のコメントをよく見てもらいつつ、ポイントのみ下記で解説

         

        a 目的地データの格納

         // 巡回地点オブジェクトを格納する配列
         public Transform[] points;

        

        上記にて、目的地となるゲームオブジェクトの位置情報を格納

        あとからシーンに目的地用のゲームオブジェクトを配置し、

        Inspector上でこの配列に配置したゲームオブジェクトを割り当てる

       

       

         // 巡回地点のオブジェクト数(初期値=0)
        private int destPoint = 0;

         

        複数設定した目的地のうちの1つを指定するために上記を使用 

        Start関数内で destPoint = Random.Range(0, points.Length)にて一つに抽選で決定

       

       

       

       b 目的地の選択

        // エージェントが現在設定された目標地点に行くように設定
        agent.destination = points[destPoint].position;

       

        GotoNextPoint()関数内では、次の目的地設定

       

       

        // エージェントが現目標地点に近づいてきたら、
        // 次の目標地点を選択します
        if (!agent.pathPending && agent.remainingDistance < 0.5f)
         GotoNextPoint();

        

         Update関数内で、目的地までのルート、距離を監視し、一定まで近づいたら

        次の目的地を設定している

       

       

      docs.unity3d.com

       

 

f:id:Harukichi:20190811122736p:plain

 

 3. 目的地の設定は、シーン上にSphereなどのゲームオブジェクトを配置し、Inspector上で先ほど作成したスクリプトに割り当てを行いリンクさせる

 

 

f:id:Harukichi:20190811134047g:plain

こうした感じで、上記のようになれば完成

お分かりいただけるだろうか?!

障害物を回避して目標までの道筋を進んでいる

 

なお、上記のキャラクターは歩いているが、ここまで説明したなかではモーションが設定されていないので、歩く動作がないまま滑るように移動するのが正解なので悪しからず

あと、目的地用のオブジェクトは、非アクティブ化して表示させないように

 

〇補足

  オブジェクトがめり込む場合f:id:Harukichi:20190811134951p:plain

ゲームオブジェクトが、地形のオブジェクトにめり込んでしまうよような場合は、NaigationのBakeの設定でAgent Radiusの数を大きくして、再度Bakeボタンを押して米くすると、上記のように余白が広くなり、この余白の外側を移動するようになる

 

 移動速度について

f:id:Harukichi:20190811135618p:plain

移動させるオブジェクトにアタッチしたNav Mesh Agentの設定のSteeringの中のSpeedを変更することにより移動速度が変化する

その他いろいろ設定はあるが公式マニュアルを参照ねがう(よくわからないので(-_-メ))