Transform下的right,up,forward

trnsform.right:世界空间变换的红色轴。

操作游戏对象在世界空间中变换的X轴(红色轴)上的位置。不像Vector3.right, Transform.right移动游戏对象,同时也考虑其旋转。

当GameObject旋转时,表示GameObject的X轴的红色箭头也会改变方向。Transform.right在红色箭头的轴(X)中移动GameObject。

要在忽略旋转的情况下在X轴上移动GameObject,请参见Vector3.right.

那么可想而知up和forward也是如此,那么今天的情况就解释的通了。

 void Update()
    {
        //速度
        float speed = 1;
        //相邻帧距离=速度X时间
        if (Input.GetKey(KeyCode.UpArrow))//向内
        {
            transform.eulerAngles = new Vector3(0, 0, 0);
            transform.position +=  transform.forward * speed * Time.deltaTime;//为什么同一个代码却改变了不同的轴的坐标值
            
         
        }
        else if (Input.GetKey(KeyCode.DownArrow))//向外
        {
            transform.eulerAngles = new Vector3(0, 180, 0);
            transform.position +=  transform.forward * speed * Time.deltaTime;

        }
        else if (Input.GetKey(KeyCode.LeftArrow))//左
        {
            transform.eulerAngles = new Vector3(0, 270, 0);
            transform.position +=transform.forward* speed * Time.deltaTime;

        }
        else if (Input.GetKey(KeyCode.RightArrow))//右
        {
            transform.eulerAngles = new Vector3(0, 90, 0);
            transform.position += transform.forward* speed * Time.deltaTime;
        }
    }

那么transform.position += transform.forward* speed * Time.deltaTime;可以使物体前后左右移动了,应为当我们transform.eulerAngles被改变了,所以Transform.forward也发生了改变,transform.eulerAngles的(0,0,0)变为了了(0,180,0),transform.forward也由(0,0,1)变为了(0,0,-1),所以一条代码便让物体产生前后左右的四种运动方式也就可以解释的通了。

我对于forward的理解是,transform.forward是物体在世界坐标的单位向量,通过这个向量我们可以确定物体的坐标来达到移动物体。
物体的新位置(x,y,x)+= 单位向量(x1,y1,z1)*总路程;

transform.position += transform.forward* speed * Time.deltaTime ;//speed*Time.deltaTime是每一帧的总路程
这和高中的时候求物体的在x,y轴的位移很像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值