こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「Unityでオブジェクト名の(Clone)の部分を削除したい!」
「(Clone)が付いていてオブジェクト名で探せなくて困っている。」
というお悩みの方に向けた内容となっています。
UnityでPrefabなどのオブジェクト生成の際に、使われることが多いInstantiate関数ですが、生成されたオブジェクトの名前の最後に(Clone)という表記が自動的に入ってしまいます。

複製されたオブジェクトであることは、画面上で見れるので分かりやすいのですが、オブジェクト名を使って参照する際に問題になってきます。
例えば、本当は「apple」というオブジェクト名なのに、わざわざ「apple(Clone)」と参照しなくてはいけなくなり、非常にややこしいことになります。
そこでこのページでは、Instantiate関数によって生成されたオブジェクト名に付く(Clone)という表記を削除する方法を紹介していきます。
なお、このページでは、
Windows11
Unity Hub3.11.0
Unity6
のバージョンで解説しています。
また、Instantiate関数については、以下の記事でまとめていますので、参考にしてみてください。
(Clone)の名前を削除する方法
(Clone)の名前を削除するためには、Instantiate関数によってオブジェクトが生成された後に、そのオブジェクト名を変更していくことになります。
ここでは、
- 生成されたオブジェクト名をnameで置き換える
- (Clone)の表記部分だけをReplaceで削除する
の2つの方法を紹介していきます。
生成されたオブジェクト名をnameで直接置き換える
生成されたオブジェクト名を一から置き換える場合は、Instantiateで生成したオブジェクトのnameに対して、直接オブジェクト名を指定する処理を加えていきます。
using UnityEngine;
public class InstantiateManager : MonoBehaviour
{
public GameObject player; // 元のオブジェクトを参照する変数
void Start()
{
GameObject clonePlayer = Instantiate(player); // ゲームオブジェクト型の変数に代入
clonePlayer.name = "player"; // nameで直接オブジェクト名を指定
}
}
行目でInstantiateによって生成されるオブジェクトをGameObject型の変数に代入して、行目でnameの値に(Clone)を消したオブジェクト名を入れてあげることで、そのオブジェクトの名前を置き換えることができます。
上記にスペースキーで生成する処理を加えたものが、以下の動画です。
これで、(Clone)の表記が消えた形でオブジェクト生成がされました。
(Clone)の表記部分だけをReplaceで削除する
先ほどの方法に似ていますが、生成されたオブジェクト名から(Clone)の部分だけをReplaceメソッドを使って、置換して削除するというやり方になります。
Replaceメソッドは、
対象の文字列.Replace("検索する文字列", "置き換える文字列");
のように書くことで、対象の文字列から特定の文字列を検索して、それを置き換えることができるメソッドです。
using UnityEngine;
public class InstantiateManager : MonoBehaviour
{
public GameObject player; // 元のオブジェクトを参照する変数
void Start()
{
GameObject clonePlayer = Instantiate(player); // ゲームオブジェクト型の変数に代入
clonePlayer.name = clonePlayer.name.Replace("(Clone)", ""); // nameの中のCloneをReplaceで消去する
}
}
行目でInstantiateで生成されるオブジェクトをGameObject型の変数に代入して、行目でそのnameの文字列に対してReplaceメソッドを使って、(Clone)の部分を無くすという処理を加えています。
こちらでも同じように、(Clone)が表示されなくなりました。
先ほどと違う点は、オブジェクト名を直接表記する必要が無いので、単純なタイプミスは減るのかなと思います。
まとめ
このページでは、PrefabなどでInstantiate関数を使ってオブジェクト生成される際に、自動的に付く(Clone)の表記を削除する方法を紹介していきましたが、いかがでしたでしょうか?
(Clone)の部分を削除するためには、Instantiate関数でオブジェクト生成された後に、
- 名前を直接指定して置き換える
- (Clone)をReplaceメソッドで消去する
という2つの方法があります。
どちらも生成した後に、nameを使って置き換える処理をしてあげることで、(Clone)の表記を削除することができます。
オブジェクト名で直接参照しているような場合は、参考にしてみてください。
最後までお読みいただきまして、ありがとうございました!
コメント