最近めっきりUnityにハマっています。今日はゾンビに追いかけられる恐怖体験を実装してみたいと思います。
前回のタイトル画面をコピーするところから始めます。
Unityで画面遷移する - ゾンビの部屋にタイトル画面を実装
UnityチュートリアルのSurvial Shooter Creating Enemy #1を参考にやっていきます。
ゾンビ側の設定
前回のタイトル画面とは別に作りたいのでシーンをコピーしておきます。やり方は簡単なので割愛。こんな感じでゾンビが配置された状態からスタートです。

どのゾンビでもいいので、Add Componentしていきます。
Rigidbodyは、ConstraintsのFreeze PositionのYのみチェック、Freeze RotationのXとZにチェックを入れて転がったりしないようにします。
Capsule ColiderはCenterをX:0, Y:1, Z:0にする。
Sphere ColiderはIs Triggerをチェック、CenterをX:0, Y:1, Z:0にする。
Nav Mesh Agentは、Speed:0.2, Radius:0.3, Height: 1.8に変更。このNav Mesh Agentというのでフィールドを学習して移動できる範囲を決めることが出来ます。詳しくはあんまり分かっていないけど。

プレイヤーの配置
以前、Unityで3Dオレの部屋を作って歩き回るでやったとおりにPlayerを配置し、同様に、Main CameraオブジェクトにFollowPlayerスクリプトを設定して、それぞれのRotationで向きを揃える。今回はY:90にしている。
NavMeshでゾンビの移動を設定する
Window -> AI -> Navigationを開く。
Bakeを開いて、Agent Radius:0.75, Agent Height: 1.9, Step Height:0.38を設定する。それぞれの数値はゾンビの大きさに合わせるっぽいがまだあんまり理解してない。
Bakeボタンを押す。これで学習してくれるっぽい?

続いて、NavMeshを使ってプレイヤーを追いかけるスクリプトを書きます。ゾンビにNew ScriptをAdd Componentします。
EnemyMovement.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyMovement : MonoBehaviour
{
Transform player;
UnityEngine.AI.NavMeshAgent nav;
void Awake()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
nav = GetComponent<UnityEngine.AI.NavMeshAgent>();
}
void Update()
{
nav.SetDestination(player.position);
}
}
最後に全てのゾンビさんに反映させるためにPrefabにApply Allします。
たったこれだけ。簡単!!
こんな感じで3体のゾンビさんが追いかけてきます。

残り
Nav Mesh Agentを設定するとなぜかゾンビさんが少しだけ浮遊してしまいます。Navigation -> BakeのStep Heightあたりを疑っているんですがまだ未解決。
あと、ゾンビさん登場時にidelアニメーションが入っているのですが、問答無用にプレイヤーを追跡してくるので、起動時に歩いていないのに空中を滑るように移動してくる点も未解決。