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



Nプログラマ(@Nprog128)です。

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

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

概要

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

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

やりたいこと

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

コード

 1using UnityEngine.UI;
 2using UnityEngine;
 3
 4public class SampleGetComponent : MonoBehaviour
 5{
 6    public GameObject targetGameObject;     // インスペクタで参照を設定する
 7
 8    void Start()
 9    {
10        // 対象のゲームオブジェクトからTextコンポーネントを取得する
11        var textComponent = targetGameObject.GetComponent<Text>();
12        // 取得したTextコンポーネントのtextを表示する
13        Debug.Log(textComponent.text);
14    }
15}

シーンの準備

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

コードの説明

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

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

やりたいこと

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

コード

 1using UnityEngine.UI;
 2using UnityEngine;
 3
 4public class SampleAddComponent : MonoBehaviour
 5{
 6    public GameObject targetGameObject;     // インスペクタで参照を設定する
 7
 8    void Start()
 9    {
10        // 追加したコンポーネントの参照が返ってくるので、textComponentに入れる
11        var textComponent = targetGameObject.AddComponent<Text>();
12        // コンポーネントのテキストを設定する
13        textComponent.text = "SampleAddComponent Text";
14    }
15}

シーンの準備

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

コードの説明

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

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

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

やりたいこと

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

コード

 1using UnityEngine.UI;
 2using UnityEngine;
 3
 4public class SampleDeleteComponent : MonoBehaviour
 5{
 6    public GameObject targetGameObject;     // インスペクタで参照を設定する
 7
 8    void Start()
 9    {
10        // 削除するコンポーネントを取得
11        var textComponent = targetGameObject.GetComponent<Text>();
12        // 取得したコンポーネントを削除(対象のゲームオブジェクトから削除される)
13        Destroy(textComponent);
14    }
15}

シーンの準備

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

コードの説明

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

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

まとめ

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

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

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

\ ちょっとお買い物 /