次のサブクラスに対し、
using UnityEngine; using System.Collections; //Sub Class public class Sub : MonoBehaviour { public int a; }
次のメインクラスがあるとする。
using UnityEngine; using System.Collections; //Main Class public class Main : MonoBehaviour { // Use this for initialization void Start () { Sub sub1 = GetComponent<Sub>(); sub1.a = 1; Sub sub2 = sub1; sub2.a = 2; Debug.Log("sub1.a="+sub1.a); Debug.Log("sub2.a="+sub2.a); } }
これを実行すると次のようになる。
sub1.a=2 UnityEngine.Debug:Log(Object) sub2.a=2 UnityEngine.Debug:Log(Object)
すなわち、クラスは参照型のため、 sub2はsub1と同じ実体を指す。
では次はどうなるだろうか。
using UnityEngine; using System.Collections; //Main Class public class Main : MonoBehaviour { // Use this for initialization void Start () { Sub sub1 = GetComponent<Sub>(); sub1.a = 3; Sub sub2 = Proc (sub1); Debug.Log("sub1.a="+sub1.a); Debug.Log("sub2.a="+sub2.a); sub2.a = 5; Debug.Log("sub1.a="+sub1.a); } Sub Proc(Sub sub){ sub.a = 4; return sub; } }
この出力は次の通り。
sub1.a=4 UnityEngine.Debug:Log(Object) sub2.a=4 UnityEngine.Debug:Log(Object) sub2.a=5 UnityEngine.Debug:Log(Object)
つまり、関数の引数にクラスを渡す場合は参照渡し。関数の中でクラスに加えた変更は呼び出し側にも反映される。