游戏对象(GameObject)的位移、旋转、缩放、父子关系,坐标转换等相关操作都由它处理。
它是Unity中一个极其重要的类。
基础
Vector3主要是用来表示三维坐标系中的 一个点或者一个向量
声明:
Vector3 v = new Vector3();
v.x = 10;
v.y = 20;
v.z = 30;
// 如果只传给xy2个值,那么另一个没有传的值将默认z为0
Vector3 v2 = new Vector3(10,20);
Vector3 v3 = new Vector3(10,10,10);
Vector3运算
Vector3 v3 = new Vector3(1,1,1);
Vector3 v4 = new Vector3(1,1,1);
print(v3+v4); // 结果:(2,2,2)
对应的就是:(x+x,y+y,z+z)
常用
下面这些都是以后常用的方向向量
Vector3.zero // 0,0,0
Vector3.down // 下 -> (0,-1,0)
Vector3.up // 上 ->(0,1,0)
Vector3.right // 右 ->(1,0,0)
Vector3.left// 左 ->(-1,0,0)
Vector3.forward// 前 -> (0,0,1)
Vector3.back // 后 -> (0,0,-1)
常用的方法
计算两个点之间的距离
Vector3.Distance(Vector3 a, Vector3 b); // 从a点到b点的距离
位置
相对世界坐标系
this.gameObject.transform
这个意思是依附的游戏物体当前的位置,可以简写成this.transform
this.transform.position // 相对于世界坐标系 原点 的位置
// 如果当前依附的对象有一个父物体的话,打印和面板中显示的Transform面板中的信息不一样,
// 面板中显示的是相对于父物体的位置。打印的则是世界坐标系的位置
输出的内容是世界坐标系的点而不是相对于父物体的坐标
相对于父物体的坐标
// 这两个坐标对于我们来说很重要,如果你想以面板的位置为准,就需要使用localPosition
this.transform.localPosition
这次就一样了。
位移
以前做题时,都是在一维只有左右,路程 = 速度 * 时间
就表示在这个方向上移动了多少m
📓当在多维的时候,就有了方向的概念,例如在2维中,我们先计算它朝着x轴的方向 * 速度 *时间
移动了多少,之后再计算他朝着y轴的方向 * 速度 * 时间
移动了多少,最后将当前所在的位置与计算出来的位置进行相加,此时就如下图指向的地方就是移动过后所在的位置。如果说错了请纠正我·
为什么要相加?因为,transform.position
是一个向量它需要一个向量的值,恰巧Vector3.right
这个方向也是一个向量,我们将方向这个向量乘以5,这个5此时就是它的标量,最后得到的就是Vector3.right=(5,0,0)
再将它乘以时间得到的就是移动位置,了解数学中向量概念的同学都知道,两个向量相加就是 向量A+向量B=(xA+xB , yA+yB, zA+zB),得到的就是物体当前所处的位置
公式:路程 = 方向 * 速度 * 时间
有了上面的概念,我们在Unity中进行验证一下:
void Update()
{
transform.position = transform.position + Vector3.right * 5 * Time.deltaTime;
}
API
Unity中提供了一个专门用于移动的方法transform.Traslate()
他有五个重载,用的比较多的就只有两个
参数一:表示位移多少,路程 = 方向 * 速度 * 时间
参数二:表示 相对坐标系
相对于世界坐标系Z轴移动
transform.Translate(Vector3.right * 5 * Time.deltaTime, Space.World);
相对于世界坐标系,物体自己的面朝向(自己的Z轴) 移动。Space.World
表示相对于世界坐标系移动
transform.Translate(transform.right * 5 * Time.deltaTime, Space.World);
相对于自己的坐标系 下的 自己的面朝向移动(一定不会让物体这样移动)
transform.Translate(transform.right * 5 * Time.deltaTime, Space.Self);
相对于自己的坐标系 下的 z轴正方向
transform.Translate(Vector3.right * 5 * Time.deltaTime, Space.Self);
注意:一般都是使用API来让物体移动
总结
Vector3的使用,如何声明 提供的常用静态属性 和一个计算距离的方法
位置,相对于世界坐标系和相对于父对象的位置 这两个位置的区别
位移,自己如何计算来进行位移
API是哪个方法来进行位移,使用时要注意。