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轴的位移很像。