[Unity] PrefabからInstantiateしたときに文字列「(Clone)」が付加される問題

Unityに関するメモ書きです。

スクリプト上でプレハブから以下のようにGameObjectを生成するとします。

var obj = Instantiate(shot) as GameObject;

このとき、以下のようにプレハブ名+(Clone)という名前のオブジェクトが追加されていることを目にすることがあると思います。

prefab_clone

ヒエラルキー上では見やすくてよいのですが、スクリプトから以下のように名前でGameObjectを取得するときに問題となります。

var obj = GameObject.Find("Shot");

「Shot」というGameObjectを検索しようとしていますが、プレハブから作成されたGameObjectは「Shot(Clone)」という名前のため検索に失敗します。
「(Clone)」という文字列を付加されたくない場合は以下のように生成されたインスタンスにプレハブ名に強制的に書換えるのが最善策らしいです。

var obj = Instantiate(shot) as GameObject;
obj.name = shot.name;

オブジェクト名で検索する場面はよくあると思われるため、上記のインスタンス化処理は関数化しておいても良いかもしれませんね。

■参考サイト
Simple Prefab Instantiate “(Clone)” Question