Unityのgetcomponentの上手な使い方と使用時の注意点まとめ

19/02/11 13:54:13     19/02/17 20:07:42

getcomponentってなに?

Unityの基本はコンポーネントで、すべてのものがコンポーネントでできていると言っても過言ではありません。普段意識はしないかもしれませんが、どの機能を操作しても度々コンポーネントという用語が出てくるかと思います。

そしてこのコンポーネントを取得する関数がgetcomponentです。このページではgetcomponentの使い方や、そもそもコンポーネントとは何かといったことを解説していきます。

そもそもComponentとは何か

Componentは処理のまとまりのようなものですが、Unityではオブジェクトに対して設定を行うためのツールです。コンポーネントを直訳すると機器の部品という意味ですが、そこまで正確に意味を捉える必要はないかと思います。

オブジェクト自体がUnity全体から見たコンポーネントと捉えることもできますが、仕様上オブジェクトがコンポーネントを保有していると考えた方がわかりやすいかもしれません。

すべてのオブジェクトがコンポーネントを保有しており、そのコンポーネントの設定を行うことで思い通りのゲームを作っていきます。

Componentの取得

次に、GetComponentを使ってのコンポーネント取得や操作を行います。GetComponentを使ってコンポーネントを取得するサンプルコードは以下です。

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

public class TestScript : MonoBehaviour {

    void Start () {
        Transform t = this.gameObject.GetComponent<Transform>();

        BoxCollider b = this.gameObject.GetComponent<BoxCollider>();
    }
}

これでコンポーネントの取得ができました。

Componentの追加

GetComponentの使い方はシンプルで、上記のようにコンポーネントを取得できます。そして次に重要なのがコンポーネントの追加や扱いです。コンポーネントの追加にはAddComponentという関数を使用します。サンプルコードは以下です。

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

public class TestScript : MonoBehaviour {

    void Start () {
        this.gameObject.AddComponent<Rigidbody> ();
    }
}

Componentの削除

次にコンポーネントを削除する方法です。destroyという破壊的な印象の関数を使用します。サンプルコードは以下です。

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

public class TestScript : MonoBehaviour {

    void Start () {
        BoxCollider b = this.gameObject.GetComponent<BoxCollider> ();
Destroy (b);
    }
}

コンポーネントを削除しました。

GameObjectとComponentの関係

上でもコンポーネントがオブジェクトに付与されるものだと説明しましたが、より具体的に確認していきます。Unityを使い始めて最初にcubeオブジェクトを作る人は多いかと思うので、この例で見ていきます。

CubeというGameObjectは「Transform」「Cube(Mesh File)」「Box Collider」「Mesh Renderer」「Default-Material」といったコンポーネントを所持しています。スクリプトを書く場合は上で説明したようにGetComponentを使用しますが、コンポーネントの基本的な設定はGUIでできます。

GameObject.Findの使い方

GetComponentはコンポーネントを取得する関数ですが、使い方として似ているものにGameObject.Find関数があります。対象がコンポーネントではなくオブジェクトなのでその意味で違いがありますが、コンポーネントを取得する方法と合わせてオブジェクトを取得する方法も知っておいた方が良いでしょう。

GameObject.Find関数を使用することで、すべてのアクティブなオブジェクトのなかから指定した名前のオブジェクトを探すことができます。サンプルコードは以下です。

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

public class FindTest : MonoBehaviour {

    void Start () {
        GameObject target1 = GameObject.Find ("FindTarget1");
        Debug.Log ("target1 = " + target1);
        GameObject target2 = GameObject.Find ("FindTarget2");
        Debug.Log ("target2 = " + target2);
    }
}

アクティブなオブジェクトから特定のオブジェクトを探し出すコードです。

Transform.Findで子オブジェクトを取得

GameObject.Findはオブジェクトを取得する関数でしたが、同じような使い方でTransform.Findは子オブジェクトを取得できます。サンプルコードは以下です。

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

public class FindTest : MonoBehaviour {

    void Start () {
        GameObject target1 = GameObject.Find ("FindTarget1");

        Transform target2 = target1.transform.Find("FindTarget2");
        Debug.Log ("target2(transform) = " + target2);
        Debug.Log ("target2(gameObject) = " + target2.gameObject);

        Transform target3 = target1.transform.Find("FindTarget3");
        Debug.Log ("target3(transform) = " + target3);
        Debug.Log ("target3(gameObject) = " + target3.gameObject);

    }
}

これで子オブジェクトを取得できました。

まとめ

以上オブジェクトやコンポーネントを取得、削除、操作する関数を紹介してきました。スクリプトは自分で書いてはいますが、メソッドを使って一発で取得でいるので自分でロジックを作りこんでいるわけではありません。

Unityではこのようにクラスオブジェクトのメソッドでだいたいのことができるので、注意点としては自分で作りこむ前にUnityの機能で実現できないか検討することです。

【Unity関連記事】
▼Unityの基礎編
・ 【unityのフリーランス求人・案件情報】エンジニア需要や開発単価、未経験でもいける?
・ 【unity入門】ゲーム開発だけじゃない、Unityで出来ること

▼Unityの外部アセット、リソース編
・ UnityでMMDモデルを自由自在に動かしてみよう!
・ Unity adsを使って簡単に広告を導入しよう
・ Unityのアセットストアの上手な使い方
・ Unityで作られているARアプリをまとめてみました

▼Unityのコンポーネント編
・ Unityのrigidbodyを使って物理演算を導入してみよう
コードを使わずにUnityでキャラ追従のカメラを作る方法
・ Unityで簡単にアニメーションを作成する方法をまとめました
・ Unityでオブジェクトを回転させる方法をわかりやすくまとめました
・ Unityのtransformを使ってオブジェクトの座標や回転を操作する
・ Unityのアニメーターを簡単に作成する方法まとめ
・ UnityのShaderの解説と使い方まとめました
・ Unityで「当たり判定」(衝突判定)を付ける方法
・ (この記事)Unityのgetcomponentの上手な使い方と使用時の注意点まとめ
・ Unityでキャラの移動を制御する方法まとめ
Unityのraycastを使って出来ることをまとめました

▼Unityのデフォルト機能、ゲーム製作編
blenderで作ったオブジェクトをUnityで組み込んでみよう
・ Unityのコルーチンとは?使い方をまとめました
Unityで作られているRPGゲームを作るための6つのステップ
・ Unityのパーティクルを使って演出できるエフェクト例
・ UnityでのUIデザインの基礎をまとめてみました
Unityのcloud buildの便利な点をまとめました
・ Unityを使って半日でFPSゲームを作ってみよう

 

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する