C#引用类型
C#中大部分的类型都是引用类型的,如类、数组、字符串。
引用类型一般通过引用(指针)来获得引用类型对象的值。
引用类型的对象是放在托管堆上的,然后与垃圾回收机制(GC)自动回收(猜测和java一样,当没有指针指向当前对象,就可以被回收了)。
当我们new一个对象时,Singer a= new Singer("张三") 分为下面三个步骤:
1. 计算所需内存空间,包括该对象及其基类们的成员、方法,还有类型对象的指针、同步索引块。
2. 初始化内存,所有字节设为0
3. 初始化类型对象的指针、同步索引块。
4. 调用类型的实例构造器,传递构造函数的参数,而且会调用基类的构造函数。
5. 返回对象的引用,赋给a。
如果有Singer b=a;那么如果b中的name发生了改变,a中的name也会一样改变,因为它们指向的是同一个对象。
Unity 3D的一些基础类
1.UnityEngine.Object
之前我们说到c#中所有的类都是继承自System.Object的,下面我们要介绍一下UnityEngine.Object,它是U3D中所有对象的基类。一些public的属性会显示在编辑器的面板上供调试者实时编辑。
2. UnityEngine.Component
组件,它是UnityEngine.Object的子类,任何添加在物体上的代码都是一个组件。这个类有一些方法经常用到,如获得该组件所在的gameobject,tag,transform,获得该组件所在物体,或者其子,或者其parent的指定组件等等。
3. UnityEngine.MonoBehaviour
在Unity中新建一个脚本文件的话,类会默认继承MonoBehaviour,其实有些时候,你觉得这个类不需要做一些挂载在物体上实时刷新的工作,你可以不让它继承这个类,那么这个类有哪些函数呢?很多很多。
Unity首先会调用所有脚本里的Awake()函数,Start()函数,
然后处理物理逻辑,分为:调用所有的fixedUpdate(),物理模拟,触发函数、碰撞函数。
然后是刚体插值,如position,rotate,
然后是处理鼠标OnMouseDown/Up等输入事件
然后所有Update()函数
然后动画、混合、变换
所有lateUpdate
渲染
销毁对象或退出场景
这些涉及到的函数都是出自MonoBehaviour类,是Unity处理事件,游戏运行的总逻辑,主要思路就是 物理检测-动画模拟-渲染