Unity

【Unity】破壊可能オブジェクトを常に補充しつつスポーン数を制限内に収める方法【GKC】

はじめに

Unityの有料アセット「GKC(Game Kit Controller)」を使用した環境下で、敵キャラクターなど破壊可能なオブジェクトをを常に補充しつつスポーン数を制限内に収める方法について解説します。

本記事は以下のバージョンで確認できている情報です。
Unityバージョン:2022.3.47f1
GKC(Game Kit Controller)バージョン:3.77
バージョンが異なる場合操作方法やUIに差異がある場合がありますのでご注意ください。

詳細手順

手順①スポーン管理用のオブジェクトを用意する

管理用のオブジェクトの用意はどちらかと言うと任意ですが、あったほうが管理が楽なので作ることをお勧めします。

例えば下図のように親オブジェクト(例:AI Pooling Manager)を作成し、その下に子オブジェクトとして後程使用するGKCの以下2つのスクリプトを配置します。

・Event Trigger System To Spawn Object
・Spawn Object

手順②Event Trigger System To Spawn Objectに設定を行う

Event Trigger System To Spawn Objectは名前の通り、オブジェクトをスポーンさせるためのトリガーの設定を行うスクリプトです。

Other Setting > Loop Event At The End Enabled にチェックをいれます。

下図ではゲーム開始直後からスポーンを開始して欲しいのでTrigger Event At Startにもチェックを入れています。

手順③Spawn Objectに設定を行う

Spawn Objectも名前の通りですが、オブジェクトのスポーンを行うスクリプトです。

ここではスポーンさせるオブジェクトの指定、ゲーム中に常時スポーンさせる最大値、オブジェクトの生死のチェックをするかどうかを設定します。

基本的には下の画像に準じて設定すればOKですが、理解できている範囲内で解説します。

Spawn List Of Object Setting

Spawn Object List:チェックを入れる。Object List To Spawnを使用するか否かの設定。

Object List To Spawn:スポーンさせるさせたいオブジェクトを設定する。複数種類のオブジェクトを設定することも可能。

Store Objects Setting

Store Spawned Objects:チェックを入れる。Spawned Object Listを使用するか否かの設定。

Spawned Object List:何かを設定する必要はない。ゲームを開始するとスポーンしたオブジェクトが自動でリストアップされる。

Spawn Limit Settings

Use Spawn Limit Amount:チェックを入れる。Spawn Limit Amountを使用するか否かの設定。

Spawn Limit Amount:ゲーム中に同時スポーンさせる数をゲームに合わせて任意に設定する。

Check If Objects Spawned Are Dead:チェックを入れる。スポーンしたオブジェクトの生死判定をするか否かの設定。

手順④オブジェクトの生死を監視するスクリプトを作成しアタッチする

手順③までの設定では「最大値までスポーンさせる」という部分は満たせても、「オブジェクトが減少したら補充する」という要求は満たせませんでした。

GKCというアセットの作成者なら生死判定を監視するスクリプトなり仕組みを作っていそうなのですが、残念ながら見つけることができなかったので自作で対応しました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AutoCheckSpawnedObjects : MonoBehaviour
{
    public spawnObject spawnObjectComponent; // `spawnObject`コンポーネントをアタッチする

    public float checkInterval = 1f; // チェックする間隔 (秒)

    private void Start()
    {
        // 定期的に`checkIfSpawnObjectsListNull`を呼び出すコルーチンを開始
        StartCoroutine(CheckSpawnedObjectsRepeatedly());
    }

    private IEnumerator CheckSpawnedObjectsRepeatedly()
    {
        while (true)
        {
            if (spawnObjectComponent != null)
            {
                spawnObjectComponent.checkIfSpawnObjectsListNull();
            }

            yield return new WaitForSeconds(checkInterval);
        }
    }
}

作成したスクリプトを手順①で作成した管理用のオブジェクトにアタッチし設定を行います。

スクリプトのアタッチ先は管理用のオブジェクト以外の任意で問題ありません。

Spawn Object Component:手順③で設定をおこなったSpawn Objectを設定する。

Check Interval:生死判定の監視を行う間隔を設定します。デフォルトは「1」。あまり間隔が小さすぎると負荷がかかるかもしれないので、動作を見ながら設定してください。

最後に動作を確認する

手順④で設定は完了なので、最後に動作確認を行ってください。

参考に貼っている画像でチラ見えしていますがGKCにはPoolingに関するスクリプトも用意されているので併用すれば処理への負荷軽減が期待できるので、おすすめです。

本記事は以上となります。

-Unity
-