【Unity】Prefabから作成されたゲームオブジェクトの名前を変更

通常、Prefabからゲームオブジェクトを作成すると、ヒエラルキーに表示されるゲームオブジェクト名は、プレファブ名+"(Clone)"となります
1つだけであればいいのですが、複数作成されている場合、同じ名前ではどのゲームオブジェクトを指しているのかがわからず、デバッグがやりにくくなります

今回は、作成されたゲームオブジェクトの名前をユニークなもの(それぞれ違うという意味)にする方法について説明します

サンプルシーン

空のゲームオブジェクトを作成し、Spawnerという名前に変更します
DiffNameSpawnerスクリプトをアタッチします

作成ずみのPrefab(事前にSphereをベースに作成済み)をアタッチしたスクリプトのインスペクター上のPrefabのアウトレット接続します

Prefabから生成されたゲームオブジェクトの名前が同じになるケース

コード

using UnityEngine;

public class DiffNameSpawner : MonoBehaviour
{
    [SerializeField]
    GameObject prefab; // シリアライズされた変数。エディターから設定可能なプレハブオブジェクトを指定します。

    void Start()
    {
        // Startメソッドが呼び出されると、Spawnerメソッドを0秒後に初めて呼び出し、その後は1秒ごとに繰り返し呼び出します。
        InvokeRepeating(nameof(Spawner), 0, 1);
    }

    void Spawner()
    {
        // 指定されたプレハブオブジェクトをインスタンス化(生成)します。
        Instantiate(prefab);
    }
}

実行結果

ヒエラルーウィンドウの表示

Enemy(Clone)
Enemy(Clone)
Enemy(Clone)
… ずっと続きます

Prefabから生成されたゲームオブジェクトの名前がユニーク(違う名前)になるように変更

コード

using UnityEngine;

public class DiffNameSpawner : MonoBehaviour
{
    [SerializeField]
    private GameObject prefab; // シリアライズされた変数。エディターから設定可能なプレハブオブジェクトを指定します。

    private int enemyCounter; // 敵オブジェクトの生成数を追跡する変数。

    void Start()
    {
        // ゲーム開始時に、敵を即座に生成し始め、その後1秒ごとに繰り返し生成します。
        InvokeRepeating(nameof(SpawnEnemy), 0f, 1f);
    }

    void SpawnEnemy()
    {
        // 指定されたプレハブを使用して新しい敵オブジェクトを生成し、一意の名前を割り当てます。
        var enemy = Instantiate(prefab);
        enemy.name = $"Enemy_{enemyCounter++}"; // 敵オブジェクトの名前に連番をつけて、一意に識別できるようにします。
    }
}

実行結果

ヒエラルーウィンドウの表示

Enemy_0
Enemy_1
Enemy_2
… ずっと続きます

Unity

Posted by hidepon