【Unity】オブジェクト名を取得できるGameObject.name

オブジェクト名を取得する Unity

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

このページでは、

「Unityでオブジェクト名をどうやって取得するの?」

「オブジェクト名をスクリプトから変更したい!」

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

Unityでは、ゲーム内に配置したオブジェクトは、全てオブジェクト名を個別で付けていくことができます。

このオブジェクト名をスクリプト内で取得することで、例えば衝突したオブジェクトの名前が分かるようになります。

オブジェクト名を取得する際は、

GameObject.name

のように、GameObject型にname変数を付けることで取得することができます。

そこで、このページでは、Unityでオブジェクト名をスクリプトから取得したり変更したりする方法について、まとめていきます。

この記事を書いた人

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

スクリプトからオブジェクト名を取得・変更する方法

スクリプトからオブジェクト名を取得したり変更したりする場合は、最初にオブジェクトの情報を取得して、そこからname変数を使って取得・変更を行っていくことになります。

ここでは、

  • オブジェクト情報を取得する
  • name変数でオブジェクト名を取得する
  • name変数でオブジェクト名を変更する

の流れで紹介していきます。

なお、ここでは、以下のようにオブジェクトを配置しています。

オブジェクト情報を取得する

どのオブジェクトの名前を取得するかを決めるために、先にオブジェクトの情報を取得してきます。

オブジェクトの情報を取得する方法は、様々な方法がありますが、ここではplayerにアタッチしているスクリプト内でGameObject型の変数objを宣言し、インスペクターウィンドウからオブジェクトを設定していきます。

using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject obj;	// オブジェクトを取得する変数
}

5行目で、publicアクセス修飾子を付けてGameObject型の変数を宣言します。

すると、playerのオブジェクトを選択してインスペクターウィンドウを見てみると、スクリプトの変数objが表示されています。

この変数のNoneと書かれている箇所に、情報を取得したいオブジェクトをドラッグ&ドロップしてきます。

これで、オブジェクトの情報が取得できました。

name変数を使ってオブジェクト名を取得する

次に、先ほどのオブジェクトの名前を取得していきます。

オブジェクト名を取得する方法は、冒頭でも書いた通り、GameObject型を使って、

GameObject.name

と、記述することでオブジェクト名を取得することができます。

using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject obj;	// オブジェクトを取得する変数

    void Start()
    {
        string objName = obj.name;	// オブジェクトの名前を変数に代入する
        Debug.Log(objName);	// コンソールにオブジェクトの名前を表示する
    }
}

9行目でname変数を使ってオブジェクト名を取得して、それを10行目でコンソールウィンドウに表示するようにしています。

これで、オブジェクト名を取得することができました。

オブジェクト名を変更する

次に、オブジェクト名を変更する方法を紹介していきます。

先ほどのname変数は、オブジェクト名を管理している変数なので、このnameに対して別のオブジェクト名を代入することで、スクリプトからオブジェクト名を変更することができます。

先ほどの例を元に、「enemyA」というオブジェクト名から、キーボードのスペースキーを押すと「enemyB」にオブジェクト名を変えたい場合、

using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject obj;	// オブジェクトを取得する変数
    string newName = "enemyB";	// 変更する名前の変数

    void Update()
    {
        if (Input.GetKeyUp(KeyCode.Space) && obj.name != newName)	// スペースキーを押した場合
        {
            obj.name = newName;	// オブジェクトの名前をnewName変数に変更する
        }
    }
}

12行目でname変数のオブジェクト名を変更してあげることで、ゲームを実行してスペースキーを押すと、ヒエラルキーウィンドウのオブジェクト名が変更されているのが確認できます。

オブジェクト名を変更することはあまり無いかもしれませんが、スクリプトから変更することができました。

まとめ

このページでは、Unityでスクリプト経由でオブジェクト名を取得する方法と、オブジェクト名を変更する方法を紹介していきましたが、いかがでしたでしょうか?

Unityのオブジェクト名は、name変数で管理されているので、GameObject.nameと記述してあげることで、そのオブジェクトの名前を取得することができます。

また、オブジェクト名を変更する場合は、そのname変数に対して別のオブジェクト名を代入してあげることで、オブジェクト名を変えることができます。

ゲーム内での処理としては、使うことが少ないかもしれませんが、オブジェクト名で処理を作る場合は、このようにname変数で行うことができます。

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

コメント