Unity3d开发(三)GameObject 作函数参数
2015-09-24 16:06
453 查看
div#cpmenu {height:200px;float:left;}
div#cpcontent {height:200px;width:150px;float:left;}
文章作者:松阳 本文出自 阿修罗道,禁止用于商业用途,转载请注明出处。 原文链接:/article/1505595.html
可以发现,作为参数传入的对象与脚本中的GameObject是一致的,因此可以认为操作的是一个对象的引用,但它并不是函数外的引用,因为当对它赋值为空时,并不能改变原值。另外经测试,GameObject的基类Object也有一样的特性。因此,所有Object的子类例如MonoBehaviour ,Component等都有这样的特性。
PS:
经提醒,我查了一下,所有的C#类都是引用类型
值类型:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
引用类:数组,用户定义的类、接口、委托,object,字符串。
还是基础不牢固,需要多加强
如果你觉得这篇文章对你有帮助,可以顺手点个顶,不但不会喜当爹,还能让更多人能看到它...
div#cpcontent {height:200px;width:150px;float:left;}
文章作者:松阳 本文出自 阿修罗道,禁止用于商业用途,转载请注明出处。 原文链接:/article/1505595.html
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 obj) { if(obj == null) { Debug.LogError("obj is null"); } else { obj.name=obj.name+"b"; Debug.Log(obj.GetInstanceID()); obj = null; } } void OnGUI() { if(GUILayout.Button("A")) { makeChild(m_obj); } if(GUILayout.Button("B")) { makeRefChild(ref m_obj); } } }我在界面中加入两个按钮,每点击一下为当前的
GameObject名字加入一个
a,然后输出InstanceID。运行程序分别点击按钮A、B、A输出如下:
可以发现,作为参数传入的对象与脚本中的GameObject是一致的,因此可以认为操作的是一个对象的引用,但它并不是函数外的引用,因为当对它赋值为空时,并不能改变原值。另外经测试,GameObject的基类Object也有一样的特性。因此,所有Object的子类例如MonoBehaviour ,Component等都有这样的特性。
PS:
经提醒,我查了一下,所有的C#类都是引用类型
值类型:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
引用类:数组,用户定义的类、接口、委托,object,字符串。
还是基础不牢固,需要多加强
如果你觉得这篇文章对你有帮助,可以顺手点个顶,不但不会喜当爹,还能让更多人能看到它...
相关文章推荐
- Unity游戏编程之游戏对象管理
- 辛巴学院-Unity-剑英陪你零基础学c#系列(三)计算与类型
- unity C#更改系统默认鼠标指针
- unity C#更改系统默认鼠标指针
- Unity - Camera
- 跳转场景的3种方式
- unity_NGUI动态字体制作与字体清晰的几点要素
- unity3d android打包中的class , .layout not found 等的问题研究
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
- unity3d 5.0以上打包安卓apk部分手机黑屏问题,尤其魅族手机
- Unity中的Material和Shader<坑待填>
- Unity中的Material和Shader<坑待填>
- Unity Attribute的使用总结
- 【Unity3D游戏开发学习笔记】(二)Unity3D编辑器总览
- Unity协程(Coroutine)原理深入剖析
- Unity小地图遮罩Shader
- unity中3D text渲染遮挡问题解决
- unity编辑器脚本工具练习
- Unity3D中使用protobuf
- Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)