そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】取得してないのにコード中唐突にでてくるgameObject、transform、tagを解説

環境

Unity 2019.3.7f1

はじめに

ネットでやりたい処理内容を探していると

・gameObject
・transform
・tag

こいつら唐突にでてきませんか?
あれ?いつ取得したの?とりあえず動くからいいか・・・

でもなんかもやもや。。。

今回はそんなもやもやを解決します!

結論

ゲームオブジェクトにスクリプトをアタッチすると、
そのスクリプトはアタッチされたゲームオブジェクトの

・ゲームオブジェクトクラス
・トランスフォームクラス
・タグ

の情報を勝手に取得します。
そして、その呼び出し呪文が


・gameObject
・transform
・tag

なわけです。

なので、
スクリプトをアタッチしたゲームオブジェクトのみ、
ゲットコンポーネント不要でゲームオブジェクトの情報や
トランスフォームの情報を操作できるのです!

具体例をみていきましょう。

具体例

それぞれの値の中身を見てみましょう。

まず、空のオブジェクトを作成します。
(名前はobject123に変更してみました)

image.png

 
スクリプトを作成し、先程のオブジェクトにアタッチします。
(名前はtestにしました)
image.png  
コードはこちら

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{    
    void Start()
    {
        Debug.Log("gameObject="+gameObject);
        Debug.Log("transform="+transform);
        Debug.Log("tag="+tag);              
    }
}

実行結果
コンポーネントを取得してないのにそれぞれの情報が入っていることがわかりますね。
image.png

実際に使ってみる

では、実際にこれらの情報を使って処理してみましょう。

処理したい内容
・gameObjectを使ってオブジェクトの名前を変える
・transformを使ってオブジェクトの位置を変える
・tagを使ってタグの名前を変える

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{   
    void Start()
    {        
        gameObject.name = "123";//このスクリプトがアタッチされたオブジェクトの名前を変更
        transform.Translate(1, 2, 3);//このスクリプトがアタッチされたオブジェクトの位置を変更
        tag = "Player";//このスクリプトがアタッチされたオブジェクトのタグ名を変更 タグはあらかじめ用意しておく必要有り
    }
}

  実行結果 オブジェクト名、タグ名、オブジェクト位置が変更できました。
image.png

おわりに

今回紹介した呪文たちをみたら、
スクリプトがアタッチされたオブジェクトについて
なにかしらの処理をしてるんだなーと考えると良いと思います。

よいUnityライフを!