unity游戏开发初学者经常遇到的问题

初学unity游戏开发的朋友一定会遇到这样一个问题
为什么不能给rotation和position的x,y,z直接赋值
这是因为rotation和position不是一个对象,而是一个类似指针的东西
这里将自己根据unity引擎源代码写的最简单版代码放在下面,方便理解

//将这些定义的作用域局限在我的命名空间中
namespace My
{
    
    
    //struct和class是一个意思,这是c语言留下来的关键字
    public struct Quaternion//unity存储方向的方式,是一个float类型的值不是角度
    {
    
    
        public float x;
        public float y;
        public float z;
        public float w;
    }

    public struct Vector3//unity存储位置的方式,向量
    {
    
    
        public float x;
        public float y;
        public float z;
    }
    public class Transform
    {
    
    
        private Quaternion _rotation = new Quaternion();
        private Vector3 _position = new Vector3();
        public Quaternion rotation//这里的rotation可以理解为指向实体_rotation的指针
        {
    
    
            get {
    
     return _rotation; }
            set {
    
     _rotation = value; }
        }

        public Vector3 position//这里的position可以理解为指向实体_position的指针
        {
    
    
            get {
    
     return _position; }
            set {
    
     _position = value; }
        }
    }

    public class Main
    {
    
    
        public static void main()
        {
    
    
            Transform transform = new Transform();
            transform.rotation.x = 1;//编译器报错
            transform.position.x = 1;//编译器报错
            //那么怎么给x赋值呢,请看下面的方法

            Vector3 vector3 = new Vector3();
            vector3.x = 1;
            transform.position = vector3;
            
            Quaternion quaternion = new Quaternion();
            quaternion.x = 1;
            transform.rotation = quaternion;
        }
    }
}

如果学有余力,想深入理解struct关键字的话,请看这篇文章:https://blog.csdn.net/onlyou930/article/details/5568319

猜你喜欢

转载自blog.csdn.net/qq_38022367/article/details/116981125
今日推荐