Unity Translate方法使用指南

文章目录

  • API 简介
  • Translate 的不同用法组合
    • 1)相对于自己坐标系下的z轴正方向移动(往面朝向移动)
    • 2)相对于世界坐标系下,自己的面朝向移动
    • 3)相对于世界坐标系下的z轴正方向移动
    • 4)相对于自己坐标系下,自己的面朝向移动

API 简介

Translate 方法是 Transform 类下的一个公共方法。一般可以用于物体的位移。
Unity Translate方法使用指南_第1张图片

方法的第一个参数表示位移多少,一般用移动方向×速度 ×时间来表示。

方法的第二个参数表示相对于哪个坐标系进行移动。如果没有传第二个参数,默认是相对于自己的坐标系。

Translate 的不同用法组合

在介绍 Translate 方法的具体使用方式之前,我先画出世界坐标系和本地坐标系便于大家后续理解。

现在新建一个物体,假设它的世界坐标系是这样的:(刚刚创建的物体本地坐标系也和世界坐标系重合)
Unity Translate方法使用指南_第2张图片

现在将物体绕 y 轴顺时针旋转一定角度。
Unity Translate方法使用指南_第3张图片
现在黑色坐标系是世界坐标系,红色坐标系是物体旋转后的本地坐标系(因为是绕 y 轴转所以 y 轴不动,就不标红了)。


1)相对于自己坐标系下的z轴正方向移动(往面朝向移动)

transform.Translate(Vector3.forward*1*Time.deltaTime);

把物体当作人,那么就是朝人的前方移动。
这个比较好理解,就是在自己的坐标系下,往(0,0,1)的方向移动。在上图中就是沿着红色的 z 轴方向移动。

2)相对于世界坐标系下,自己的面朝向移动

transform.Translate(transform.forward*1*Time.deltaTime,Space.World);

效果和上面那种方法是相同的,都是沿着红色的 z 轴方向移动。

这里简单提一下 transform.forward,它代表了物体当前的面朝向(自身的z 轴指向),并且是相对于世界坐标系下的
Unity Translate方法使用指南_第4张图片
也就是用自己坐标系下的(0,0,1)投影到世界坐标系下的各分量来表示 forward 得出的向量,以上面画的坐标系图为例,就是这样理解:
Unity Translate方法使用指南_第5张图片
transform.forward 得出的向量就是(Zx,0,Zz),从黑色的世界坐标系来看就是沿着红色的 z 轴方向。

3)相对于世界坐标系下的z轴正方向移动

transform.Translate(Vector3.forward*1*Time.deltaTime,Space.World);  

此时物体只会朝黑色的 z 轴移动。

4)相对于自己坐标系下,自己的面朝向移动

(一般不会这样用)

transform.Translate(transform.forward*1*Time.deltaTime,Space.Self);

transform.forward 得到的向量是相对于世界坐标系的,可这时候我们要求相对于自己的坐标系,那么必须将原来 forward 得到的向量转化成自己坐标系的一个向量。这时候物体的移动方向也就不会是自己的面朝向了。
Unity Translate方法使用指南_第6张图片
最后的移动方向是蓝色的 z’ 轴
以上面这张图为例,就是原先由黑色 z 轴转到红色 z 轴旋转了一定角度。然后再从红色 z 轴旋转相同的角度到蓝色 z’ 轴的方向(有点像将原来的世界坐标系旋转到红色的坐标系,那么原本相对于黑色坐标系的红色 z 轴就相应变成了相对于原本红色坐标系的蓝色 z’ 轴)。

总结
如果想实现物体沿自身方向移动,比如游戏中常见的人物移动,参考前两种方法就好了。尤其注意不要掉入最后一种方式的陷阱,因为有可能会写成 :

transform.Translate(transform.forward*1*Time.deltaTime);

那么它是无法实现我们正常想要看到的人物移动效果的。

你可能感兴趣的:(#,Unity,小,tips,unity,线性代数,矩阵)