[Unity] スクリプトからコンポーネントを追加や取得、削除してみる



Nプログラマです。

Unityでゲームを作り始めたので、その時に勉強した内容を備忘録として記録していきます。

今回は、自分以外のゲームオブジェクトへのコンポーネントの操作です。

概要

自分以外の別のゲームオブジェクトに対してコンポーネントの取得と追加、削除について紹介します。

ゲームオブジェクトから取得(GetComponent)

やりたいこと

他のゲームオブジェクトから、Textコンポーネントを取得してそのテキストを表示する。

コード

using UnityEngine.UI;
using UnityEngine;

public class SampleGetComponent : MonoBehaviour
{
    public GameObject targetGameObject;     // インスペクタで参照を設定する

    void Start()
    {
        // 対象のゲームオブジェクトからTextコンポーネントを取得する
        var textComponent = targetGameObject.GetComponent<Text>();
        // 取得したTextコンポーネントのtextを表示する
        Debug.Log(textComponent.text);
    }
}

シーンの準備

  1. ターゲットとなるゲームオブジェクト(TargetGameObject)を作成。
  2. TargetGameObjectに、インスペクタからTextコンポーネントを追加(取得用)。
  3. TargetGameObjectを取得する用のゲームオブジェクト(SampleGetCompoment)を作成。
  4. SampleGetComponentゲームオブジェクトに、上のSampleGetComponent.csを貼り付ける。
  5. SampleGetComponentゲームオブジェクトのtargetGameObjectプロパティに、TargetGameObjectの参照を設定する。

コードの説明

対象のゲームオブジェクトからTextコンポーネントを取得して、テキストの中身を表示しています。

ゲームオブジェクトへ追加(AddComponent)

やりたいこと

他のゲームオブジェクトへ、スクリプトでコンポーネントを追加したい。

コード

using UnityEngine.UI;
using UnityEngine;

public class SampleAddComponent : MonoBehaviour
{
    public GameObject targetGameObject;     // インスペクタで参照を設定する

    void Start()
    {
        // 追加したコンポーネントの参照が返ってくるので、textComponentに入れる
        var textComponent = targetGameObject.AddComponent<Text>();
        // コンポーネントのテキストを設定する
        textComponent.text = "SampleAddComponent Text";
    }
}

シーンの準備

  1. ターゲットとなるゲームオブジェクト(TargetGameObject)を作成。
  2. TargetGameObjectを取得する用のゲームオブジェクト(SampleAddCompoment)を作成。
  3. SampleAddComponentゲームオブジェクトに、上のSampleAddComponent.csを貼り付ける。
  4. SampleAddComponentゲームオブジェクトのtargetGameObjectプロパティに、TargetGameObjectの参照を設定する。

コードの説明

対象のゲームオブジェクトへTextコンポーネントをAddComponentメソッドで追加して、テキストの中身を設定しています。

実行すると、対象のゲームオブジェクトのインスペクタにTextコンポーネントが表示されています。

ゲームオブジェクトから削除(Destroy)

やりたいこと

他のゲームオブジェクトにコンポーネントを、スクリプトで削除したい。

コード

using UnityEngine.UI;
using UnityEngine;

public class SampleDeleteComponent : MonoBehaviour
{
    public GameObject targetGameObject;     // インスペクタで参照を設定する

    void Start()
    {
        // 削除するコンポーネントを取得
        var textComponent = targetGameObject.GetComponent<Text>();
        // 取得したコンポーネントを削除(対象のゲームオブジェクトから削除される)
        Destroy(textComponent);
    }
}

シーンの準備

  1. ターゲットとなるゲームオブジェクト(TargetGameObject)を作成。
  2. TargetGameObjectに、インスペクタからTextコンポーネントを追加(削除用)。
  3. TargetGameObjectを取得する用のゲームオブジェクト(SampleDeleteCompoment)を作成。
  4. SampleDeleteComponentゲームオブジェクトに、上のSampleDeleteComponent.csを貼り付ける。
  5. SampleDeleteComponentゲームオブジェクトのtargetGameObjectプロパティに、TargetGameObjectの参照を設定する。

コードの説明

対象のゲームオブジェクトにすでにアタッチされているTextコンポーネントを削除しています。

実行すると、実行前に追加していたTextコンポーネントが、対象のゲームオブジェクトから削除されています。

まとめ

今回は、他のゲームオブジェクトに対するコンポーネントの取得と追加、削除についての内容でした。

コンポーネント内で、同じコンポーネントを何度も取得している場合は、AwakeやStartメソッドで参照を保持しておくのがいいかもしれませんね。

それでは、このへんで。
バイナリー!