[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}
シーンの準備
- ターゲットとなるゲームオブジェクト(TargetGameObject)を作成。
- TargetGameObjectに、インスペクタからTextコンポーネントを追加(取得用)。
- TargetGameObjectを取得する用のゲームオブジェクト(SampleGetCompoment)を作成。
- SampleGetComponentゲームオブジェクトに、上のSampleGetComponent.csを貼り付ける。
- 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}
シーンの準備
- ターゲットとなるゲームオブジェクト(TargetGameObject)を作成。
- TargetGameObjectを取得する用のゲームオブジェクト(SampleAddCompoment)を作成。
- SampleAddComponentゲームオブジェクトに、上のSampleAddComponent.csを貼り付ける。
- 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}
シーンの準備
- ターゲットとなるゲームオブジェクト(TargetGameObject)を作成。
- TargetGameObjectに、インスペクタからTextコンポーネントを追加(削除用)。
- TargetGameObjectを取得する用のゲームオブジェクト(SampleDeleteCompoment)を作成。
- SampleDeleteComponentゲームオブジェクトに、上のSampleDeleteComponent.csを貼り付ける。
- SampleDeleteComponentゲームオブジェクトのtargetGameObjectプロパティに、TargetGameObjectの参照を設定する。
コードの説明
対象のゲームオブジェクトにすでにアタッチされているTextコンポーネントを削除しています。
実行すると、実行前に追加していたTextコンポーネントが、対象のゲームオブジェクトから削除されています。
まとめ
今回は、他のゲームオブジェクトに対するコンポーネントの取得と追加、削除についての内容でした。
コンポーネント内で、同じコンポーネントを何度も取得している場合は、AwakeやStartメソッドで参照を保持しておくのがいいかもしれませんね。
それでは、このへんで。
バイナリー!