2016年8月31日水曜日

UnityのGetComponentとかFindとか

間違いや過不足などあればご指摘頂けると!

GetComponentに関して

gameObject.GetComponent<XXX>();した際、対象のクラスのコンポーネントが複数存在する場合は不定
複数取得する場合はGetComponentsを利用
gameObject.transformには.parentや.childCountなど親子関係の情報も保持

GetComponent (XXX)だと戻り値はComponent型となるためGetComponent(XXX) as XXXとすることでXXX型として返すことが可能
GetComponent<XXX>()であればジェネリクスを用いてXXX型で返すことが可能
該当するオブジェクトがない場合はnull

interfaceを指定したい場合はGetComponent(typeof(XXX)) as XXX

GetComponentsInChildren(XXX, true)で非アクティブもヒット
(GetComponentsInChildren<XXX>(true)も同様)

Find系に関して

Find("XXX")で名前でオブジェクトを検索することが可能
Find系は基本的にアクティブのみヒット

transform.Find("XXX")とすることで直下の子供だけを検索(孫以下は対象外)
非アクティブもヒット

FindObjectOfType(typeof(XXX))によってクラス名を指定して検索

名前で検索するのは重い処理
複数ヒットした場合は不定

非アクティブに関して

オブジェクトを非アクティブにする時はgameObject.SetActive(false)
スクリプトを非アクティブにする時はComponent.enabled = false

0 件のコメント:

コメントを投稿