同一のComponentを別々に取得

UnityでInspectorにあるcomponentを取得するにはGetComponentをよく使う。それについて

GetComponent<>()…….

GetComponent<取得したい奴>()と打つとアタッチされてるInspectorビューのComponent一覧を探してComponentを取得すると言うもの。基本的だが「.」で区切ればプロパティにもアクセスできる。
例えば
スクリプトからCubeのBoxColliderのIsTriggerにアクセスしたいのなら

this.GetComponent<BoxCollider>().IsTrigger

と書けばOK。IsTriggerはチェックボックス式(bool型)なので=trueか=falseとすれば簡単にON,OFFができる。自身のオブジェクトにアタッチしてるならthisは省略してもOK。

同一のComponent

導入はさておき、下の画像の様に1オブジェクトに複数尚且つ同一のComponentをアタッチしていた場合どうするか。

33c6a16a9e435f8d95a7593fecf2c7d5

AddComponentをつかう

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
public BoxCollider secondBoxCollider;
       void Start () {
             secondBoxCollider = gameObject.AddComponent<BoxCollider>();
             Debug.Log(secondBoxCollider);
       }
}

AddComponentで取得したものを変数に入れておけば同じComponentがあっても大丈夫である。
一番シンプルで直感的に同一オブジェクトを分けることができる反面、EditColliderなどした場合Sizeなどの数値もすべてコードから変更しなければならないため、コードが長くなってしまうというデメリットも有る。

GetComponentsを使う

配列型のGetComponentsを利用してComponentを取得する。

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour
{

    void Start() {

        Collider[] a = GetComponents<Collider>();
        int i = 0;
        foreach(Collider test in a){
            a[i++] = test;
        }
        Debug.Log(a[3].isTrigger);//上から4番目のColliderを取得
	}

}

foreachの中でぐるぐる回して弄りたいComponentの番号(0~)を書き込めばいじれるというやり方。
foreachの書き方はforeach(変数名 in 仮数名)。
AddComponentと違いEditColliderなどで数値を弄ってたりしてても影響をあたえないでComponentを取得することが可能。
配列を使うので慣れてないとちょっと違和感(自分のこと)。

参考サイト様

Unity DOCUMENTATION

myoujing!!

コガネブログ

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中