U1L7-2——位置与位移
U1L7-2——位置与位移
Transform中的位置与位移相关
要操作这一部分,需要先掌握Vector3基础
Unity的三维空间里的位置有 相对于世界坐标系 和 相对于父对象 这两个坐标的区别
而Unity的位置坐标也不能够单独修改xyz,只能一起统一改
本章代码关键字
1 | this.transform.position //对象相对于世界坐标系的位置的属性 |
相对于世界坐标系 和 相对于父对象 这两个坐标可能出现一样的情况:
- 父对象的坐标就是世界坐标系原点0,0,0
- 对象没有父对象
相对世界坐标系的位置
通过.position
得到的位置 是相对于世界坐标系原点的位置
可能和Inspector面板上显示的数据是不一样的,因为如果对象有父子关系 且父对象位置 不在原点 那么 和面板上肯定就是不一样的
1 | this.transform.position; |
相对父对象坐标系的位置
相对于父对象坐标系原点的位置,这两个坐标对我们来说很重要 如果想要以面板坐标为准来进行位置设置
那一定是通过localPosition
来进行设置的transform.localPosition
1 | this.transform.localPosition; |
位置的赋值
注意! 位置的赋值不能直接改变x,y,z只能整体改变
类似于 this.transform.position.x = 10;
这样是错的
1 | this.transform.position = new Vector3(10, 10, 10); |
如果只想改一个值 x,y,z要保持原有坐标一致
直接赋值
1 | this.transform.position = new Vector3(19, this.transform.position.y, this.transform.position.z); |
先取出来再赋值
虽然不能直接改 transform
的 xyz 但是 Vector3
是可以直接改 xyz 的
所以可以先取出来改 Vector3
,再重新赋值
1 | Vector3 vPos = this.transform.position; |
获取朝向
如果你想得到对象当前的一个朝向,那么就是通过transform.
出来的对象当前的朝向
对象当前的面朝向
1 | this.transform.forward; |
对象当前的头顶朝向
1 | this.transform.up; |
对象当前的右手边
1 | this.transform.right; |
位移
首先需要理解坐标系下的位移计算公式:路程 = 方向 * 速度 * 时间
自己计算位移
想要变化的 就是 position
用当前的位置 + 我要动多长距离
因为使用的是 this.transform.forward
所以它始终会朝向相对与自己的面朝向取动
1 | this.transform.position += this.transform.forward * 1 * Time.deltaTime; |
下面是相对于世界z轴正方向移动:方向非常重要 因为 它决定了你的前进方向
1 | this.transform.position += Vector3.forward * 1 * Time.deltaTime; |
API计算位移
注意:一般使用API位移
- 参数一:表示位移多少:
路程 = 方向 * 速度 * 时间
(第一个是三维方向) - 参数二:表示 相对坐标系 (默认 该参数是相对于自己的坐标系的)(第二个参数就是参考系)
1 | //相对于世界坐标系的 Z轴 动 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!