Unityで追いかけてくるゾンビを実装する

最近めっきりUnityにハマっています。今日はゾンビに追いかけられる恐怖体験を実装してみたいと思います。

前回のタイトル画面をコピーするところから始めます。

Unityで画面遷移する - ゾンビの部屋にタイトル画面を実装

UnityチュートリアルのSurvial Shooter Creating Enemy #1を参考にやっていきます。

ゾンビ側の設定

前回のタイトル画面とは別に作りたいのでシーンをコピーしておきます。やり方は簡単なので割愛。こんな感じでゾンビが配置された状態からスタートです。

ステージ

どのゾンビでもいいので、Add Componentしていきます。

Rigidbodyは、ConstraintsFreeze PositionのYのみチェック、Freeze RotationのXとZにチェックを入れて転がったりしないようにします。

Capsule ColiderCenterX:0, Y:1, Z:0にする。

Sphere ColiderIs Triggerをチェック、CenterX: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にしている。

Window -> AI -> Navigationを開く。

Bakeを開いて、Agent Radius:0.75, Agent Height: 1.9, Step Height:0.38を設定する。それぞれの数値はゾンビの大きさに合わせるっぽいがまだあんまり理解してない。

Bakeボタンを押す。これで学習してくれるっぽい?

Navigation

続いて、NavMeshを使ってプレイヤーを追いかけるスクリプトを書きます。ゾンビにNew ScriptAdd 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);
    }
}

最後に全てのゾンビさんに反映させるためにPrefabApply Allします。

たったこれだけ。簡単!!

こんな感じで3体のゾンビさんが追いかけてきます。

追いかけてくるゾンビ

残り

Nav Mesh Agentを設定するとなぜかゾンビさんが少しだけ浮遊してしまいます。Navigation -> BakeStep Heightあたりを疑っているんですがまだ未解決。

あと、ゾンビさん登場時にidelアニメーションが入っているのですが、問答無用にプレイヤーを追跡してくるので、起動時に歩いていないのに空中を滑るように移動してくる点も未解決。



mofmof inc. 採用情報

mofmof inc.では、一緒に仕事をしてくださるエンジニアを募集しております。
募集要項については以下をご確認ください。
興味を持っていただけましたら、ぜひ一度ゆっくりお話出来れば嬉しいです。

mofmofは何をしたいのか
https://www.mof-mof.co.jp/recruit/want-to-do