GameObjectに対し、あるコンポーネントを持っているかを調べ、なければ足す(あるいは、処理を変える)場合の手順
例えば、あるGameObjectに対し、rigidbodyコンポーネントがなければ新たに加え、rigidbodyコンポーネントを返す例。
if(rigidbody == null){ return transform.gameObject.AddComponent("Rigidbody") as Rigidbody; }else{ return rigidbody; }
'rigidbody == null'は、rigidbodyコンポーネントがない場合に真となる。
Componentを足すだけなら、
GameObject.AddComponent("コンポーネント名")
でよいが、Componentを加えると同時に、そのコンポーネントを変数として取得する場合、
変数 = GameObject.AddComponent(”コンポーネント名”) as コンポーネント名
のように一行で行える。
AddCompnent()の引数はComponent型のため、コンポーネントの型に応じたキャスト(上の例ではRigidbody)が必要。
カスタムクラス・コンポーネントの場合は、次のように書ける。
if(ball.GetComponent<Ball>()){ //if Ball does not exist ballRB = ball.GetComponent<Ball>().getRB(); }else{ ballRB = ball.rigidbody; }
一行目は、
if(ball.GetComponent<Ball>() != null){
としてもよい。
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
追記:2013/9/13
特定のコンポーネントなければ加える別な方法として、Runtime Attributeの[Require Component(typeOf(コンポーネント名))]
を使う手もある。エディター上で見えるので、必ず組にして使う必要があるコンポーネントならこの方法がわかりやすい。
using UnityEngine; using System.Collections; [RequireComponent (typeof (Rigidbody))] public class Test : MonoBehaviour { .........
とすれば、Scriptをアタッチした時点で、アタッチしたゲームオブジェクトがRigidbodyコンポーネントを持っていなければ自動的に加えられる。