GameObject是引用类型么
今天忽然想到这样的问题,如果将一个GameObject作为参数传入,在函数内直接更改它,那么它应该是值传递还是引用传递呢?
结论
先说推出的结论:当GameObject作为参数传递时,传递的是对象的引用的拷贝。它很类似C#中的 Func(ref int value),但与其不同的是对它赋值并不会改变原值,因此它是一个拷贝变量,反过来,如果希望影响这个引用,则可以使用ref
验证
所以我做了这样的一个实验:
public class testRef : MonoBehaviour {
GameObject m_obj;
void Start () {
m_obj = gameObject;
Debug.Log("GameObject Instance ID:"+gameObject.GetInstanceID());
}
void makeChild(GameObject obj) {
if(obj == null) {
Debug.LogError("obj is null");
} else {
obj.name=obj.name+"a";
Debug.Log(obj.GetInstanceID());
obj = null;
}
}
void makeRefChild(ref GameObject