範囲内の敵を全て検知する(CircleCastAll)|Unityゲーム制作

今回はUnity6で「Physics2D.CircleCastAll」を利用して指定した範囲内の敵キャラクターを全て検知するのを実装してみます。

はじめに

使用するのは「Unity 6」のバージョン「6000.0.40f1」、テンプレートは「Universal 2D」です。まずはキーボード入力で動くプレイヤーを作成します。

下記記事で作成した「2Dプレイヤーを上下左右に動かす」を利用しています。

実装開始

まずは敵キャラを作成します。Hierarchyの「+」から「2DObject」→「Sprites」→「Square」を追加。名前を「Enemy」に変更して、サイズと色を変えます。

LayerをEnemyに「AddComponent」から「BoxCollider2D」を追加します。赤色の四角が検知する敵になります。

下記スクリプトを作成します。

using System;
using UnityEngine;

public class EnemyScan : MonoBehaviour
{
    [SerializeField] private float Range;
    [SerializeField] private LayerMask targetLayer;

    [SerializeField]private GameObject[] enemy = new GameObject[10];

    private void FixedUpdate()
    {
        RaycastHit2D[] hits;
        hits = Physics2D.CircleCastAll(transform.position, Range, Vector2.zero, 0, targetLayer);

        Array.Clear(enemy, 0, 10);
        for (int i = 0; i < hits.Length; i++)
        {
            enemy[i] = hits[i].collider.gameObject;
        }
    }

    void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere((Vector2)transform.position, Range);
    }
}

スクリプトをプレイヤーに追加します。パラメータをセットします。Rangeは検知する範囲です。

シーンに表示された赤い丸が検知する範囲になります。

プレイヤーを動かして範囲内に敵キャラクターが入ると検知することが出来ます。パラメータにオブジェクトが格納されたらOKです。

Enemyを複製します。

下記のように全て検知出来たらOKです。

タイトルとURLをコピーしました