C#值类型
值类型在C#中是存在与线程栈中的,不归垃圾回收机制管,一般的赋值都是复制数据。所有的值类型的基类是抽象类System.ValueType,而ValueType的基类是Object
值类型包括结构和枚举类,结构类又分为三种:
1. 数值类型,但是数组不是
2. 布尔类型
3. 结构体,比如DateTime
有人会觉得结构体和类很像,都有成员变量甚至成员函数,而且觉得当一个类比较简单时就用结构体吧,但其实两者一个是值类型一个是引用类型,值类型无需垃圾回收,引用类型需要GC,比较消耗性能,但是值类型在传递参数、赋值方面性能消耗大,
所以需要视情况而定。(之前做的那个项目,老师就是没想到结构体与类的类型区别,导致后面逻辑出错)
值类型有以下特点:
不派生出其他任何类型
不需要其他类型派生(所以为什么是从ValueType派生出的?应该是最后一步进行了从类到值类型的拆箱)
值类型不可变,只能销毁重新生成另一个值类型。
Unity 3D中的值类型
Vector2/Vector3/Vector4
它们的常用向量的简写,如Vector3.up之类的
还有成员变量,x/y/z/w/magnitude/normalized/sqrMagnitude(返回长度的平方)
主要掌握点乘(结果是一个数值,可以通过该数值来判断人物是否面对着某物体:transform.forward dot (target.transform.position-transform.position))
叉乘,结果是一个向量,满足右手坐标系,不满足交换律
Color/Color32
color的每个参数我0~1,color32是0~255
Plane
由法向量与原点到该面的距离定义
还有Rect/Bounds/RaycastHit/Touch/Ray等