【Unity】Prefab生成時の(Clone)の名前を削除する方法

(Clone)の削除方法 Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「Unityでオブジェクト名の(Clone)の部分を削除したい!」

「(Clone)が付いていてオブジェクト名で探せなくて困っている。」

というお悩みの方に向けた内容となっています。

UnityでPrefabなどのオブジェクト生成の際に、使われることが多いInstantiate関数ですが、生成されたオブジェクトの名前の最後に(Clone)という表記が自動的に入ってしまいます。

複製されたオブジェクトであることは、画面上で見れるので分かりやすいのですが、オブジェクト名を使って参照する際に問題になってきます。

例えば、本当は「apple」というオブジェクト名なのに、わざわざ「apple(Clone)」と参照しなくてはいけなくなり、非常にややこしいことになります。

そこでこのページでは、Instantiate関数によって生成されたオブジェクト名に付く(Clone)という表記を削除する方法を紹介していきます。

なお、このページでは、

Windows11
Unity Hub3.11.0
Unity6

のバージョンで解説しています。

また、Instantiate関数については、以下の記事でまとめていますので、参考にしてみてください。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

(Clone)の名前を削除する方法

(Clone)の名前を削除するためには、Instantiate関数によってオブジェクトが生成された後に、そのオブジェクト名を変更していくことになります。

ここでは、

の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関数でオブジェクト生成された後に、

という2つの方法があります。

どちらも生成した後に、nameを使って置き換える処理をしてあげることで、(Clone)の表記を削除することができます。

オブジェクト名で直接参照しているような場合は、参考にしてみてください。

最後までお読みいただきまして、ありがとうございました!

コメント