【Unity】視界に入ったら襲ってくる敵を作る方法

unity

アクションゲームを作りたいと思い最初に実装してみたのが、襲いかかってくる敵だ。

動画のように壁がある場合には襲ってこないが、ゾンビの視界に入った時に襲ってくるようにした。

Asset Storeに会った無料の「Zombie」をダウンロードし配置。

プレイヤーを追いかけさせるにNavMeshを利用した。

Bakeを押すとプレイヤーへのルートが計算され、追いかけることが可能になる。

Bakeの計算が終わったら、Nav Mesh Agentのコンポーネントをゾンビに追加する。

追いかける加速度、速度を設定できる。

ゾンビの中にからのオブジェクト、CollisionDetectorを作成。

以下のスクリプトとコライダをアタッチする。

public class CollisionDetector : MonoBehaviour
{
    [SerializeField] private TriggerEvent onTrigerStay = new TriggerEvent();

    private void OnTriggerStay(Collider other)
    {
        onTrigerStay.Invoke(other);
    }

    [Serializable]
    public class TriggerEvent : UnityEvent<Collider>
    {

    }
}

コライダの半径(Radius)がゾンビが認知する範囲である。

これで、半径の範囲にプレイヤーが入ってきたら、ゾンビにアタッチされた下記のonDetectObjectが実行される。

    public void onDetectObject(Collider collider)
    {
        if (collider.CompareTag("Player"))
        {

            var positionDiff = collider.transform.position - transform.position;
            var distance = positionDiff.magnitude;
            var direction = positionDiff.normalized;

            var hitCount = Physics.RaycastNonAlloc(transform.position, direction, _raycastHits, distance);

            if (hitCount == 1)
            {
                _agent.isStopped = false;
                _agent.destination = collider.transform.position;
            }
            else
            {
                _agent.isStopped = true;
            }
        }
    }

Raycastを使っているのは、ゾンビの視線にプレイヤーが入った時のみ襲ってくるようにするためだ。

プレイヤーとの間に障害物がある場合には、hitcountが2になるためゾンビは襲ってこない。

そんな感じ!

終わり!

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog