【Unity入门】值类型和引用类型
大家好,我是Lampard~~
欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢
(一)值类型
(1)C#的值类型
1. 布尔类型(bool)
2. 字符类型(char)
3. 整数类型(byte、sbyte、short、ushort、int、uint、long、ulong)
4. 浮点数类型(float、double、decimal)
5. 枚举类型(enum)
6. 结构体类型(struct )
如上节课我们外置的速度参数,就是一个浮点类型,也就是一个值类型
(2)Unity的值类型
1. 向量类型(Vector2、Vector3、Vector4)
2. 颜色类型(Color、Color32)
3. 矩阵类型(Matrix4x4)
4. 四元数类型(Quaternion)
5. 边界框类型(Bounds)
6. 射线类型(Ray)
7. 平面类型(Plane)
8. 时间类型(TimeSpan)
Unity在C#的基础上引入了一些特有的值类型, 比如我们访问transform组件的position属性时,或者访问欧拉角时,取得的都是一个Vector3类型,它也是一个值类型
(二)值类型和引用类型的区别
(1)引用类型
引用类型就不展开细说了,一切由类实例化出来的对象都是引用类型,如下:
1. 资源类型(Resource)
2. 游戏对象类型(GameObject)
3. 组件类型(Component)
4. 材质类型(Material)
5. 纹理类型(Texture)
6. 脚本类型(Script)
7. 动画类型(Animation/Animator)
8. 声音类型(AudioSource)
9. 碰撞器类型(Collider)
10. 刚体类型(Rigidbody)
11. 粒子类型(Particle System)
12. 光源类型(Light)
13. UI组件类型(UI)
14. 场景对象类型(Scene)
15. 引用类型的数组类型(List、Dictionary、Array)
(2)引用类型和值类型的区别
值类型和引用类型是C#中的两种不同的数据类型,它们的主要区别在于:
1. 存储方式:值类型的值直接存储在栈上,而引用类型的值存储在堆上,栈和堆是计算机内存中的两个不同区域。
2. 复制方式:值类型在进行复制时,会直接复制其值;而引用类型在进行复制时,只会复制指向堆上对象的引用,而不会复制整个对象。
3. 生命周期:值类型的生命周期是由其所在的作用域控制的,一旦超出作用域,即被自动释放;而引用类型的生命周期则由垃圾回收器控制,只有在没有任何引用指向堆上对象时,对象才会被回收。
4. 可变性:值类型是不可变的,一旦被赋值,其值就无法修改;而引用类型是可变的,可以在任何时候修改其状态。
(三)外置引用类型参数
我们之前有做到让小车朝着红旗移动的功能,当时我们获取红旗的方式是通过GameObject.Find这个静态方法来寻得红旗
void Start()
{
flag = GameObject.Find("红旗");
this.transform.LookAt(flag.transform);
}
这样的做法一方面,会容易出错,比如存在多个红旗对象呢?另一方面也不方便,我们可能无法得知具体对象的名称
因此我们可以把红旗定义为一个外置的GameObject对象,我们在编译器中把该对象赋值过去就行了
好啦今天就到这里,感谢阅读!!!
点赞,关注!!!