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

Unity初心者おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

➂ゾンビの徘徊、プレイヤーの追跡 その2 プレイヤーを見つけるとプレイヤーの追跡を開始、プレイヤーを見失うと、また元の徘徊モードに復帰

今回は、徘徊するゾンビがどのようにプレイヤーを追跡するようになるのかを説明していく

今回はほぼほぼスクリプトの話が中心になりそう・・・

 

f:id:Harukichi:20190811170331g:plain

〇処理の概要

 1 プレイヤーがゾンビの視野内にいるかどうかの確認

 2 プレイヤーがゾンビの視野に入った場合の処理

 3 プレイヤーを見失う条件

 

 

1 プレイヤーがゾンビの視野内にいるかどうかの確認

f:id:Harukichi:20190811154917p:plain

追跡者であるゾンビのゲームオブジェクトに上記のスクリプトを追加

以下では上記スクリプトのポイントについて解説していく

 

9      public Transform target;

 追跡するプレイヤーをInspector上で割り当てるためにpublicで位置情報用の変数を定義

 

 

25 public bool DetectTarget()
26 {
27  Vector3 direction = target.position- transform.position;

          ターゲットであるプレイヤーとの距離を計算


28  RaycastHit hit;

29

30  if (Vector3.Angle(transform.forward, direction) < 45f)

    ゾンビの正面の位置と、ターゲットの位置とをパラメーターとして、

    二点間の角度を算出し45度以下であれば以下の処理を実行

    つまりは、ゾンビの正面45度の角度内にプレイヤーがいるかどうかを確認

    している


31  {
32    if(Physics.Raycast(transform.position,direction,out hit))
33    {
34      if (hit.transform == target)
35      {
36       return true;
37      }
38    }
39  }
40  return false;
41 }

    32行目からはRaycast関数を使用し、ゾンビからrayを飛ばして、

   rayが当たったオブジェクトがプレイヤーのポジションと一致した場合に

   trueを返している

 

 なお、その他のスクリプトについては、デバック用にrayに色を付けるイメージで線を描画しており、制御上は必要ないが、動作が怪しい時には参考になるので自力で調べてほしい(-_-メ) 

 

2 プレイヤーがゾンビの視野に入った場合の処理 

f:id:Harukichi:20190811162557p:plain

  先ほど「1」の項目で説明したスクリプトは、ゾンビの徘徊制御用のスクリプトのUpdate関数の中で使用されており(66、67行)、ゾンビがターゲットを発見していない状態では毎フレーム呼び出している

 

 ゾンビがプレイヤーを視野にとらえると、IsTargetFindにtrueが格納され、true出ない場合はそのまま徘徊を続ける(70~77行)

 

   プレイヤーを視野にとらえ 、IsTargetFindがtrueの場合(78~81行)は、

  agent.destination = target.position;

 徘徊の目的地をターゲットであるプレイヤーの位置に設定


 agent.speed = 5.5f;

 ゾンビの進行速度を1から5.5にアップし、通常の足を引きずり歩くような状態から、走って追いかけるような状態に変更している

 

 

3 プレイヤーを見失う条件

 「2」の項目のスクリプトの85~90行において、再度ゾンビの視野からプレイヤーまでの角度を確認し、45度を超える場合は視界から外れたとして、通常の徘徊動作にもどしている

 

 ということで、ゾンビ徘徊⇒プレイヤー発見⇒ダッシュで追跡⇒プレイヤーを見失う⇒徘徊の流れの制御を解説した

 なお、ゾンビ自体のモーションも上記の状況に合わせて変更しているのだが、そちらのやり方についてはまた次回以降に