U1L7-3——角度与旋转
U1L7-3——角度与旋转
Transform中的角度与旋转相关
角度相关和位置相关差不多,通过Transform
可以得到相对于世界坐标系和相对于父对象坐标系的角度,旋转也分为自转和公转
本章代码关键字
1 | this.transform.eulerAngles //游戏对象相对于世界坐标系的角度的属性,用欧拉角表示 |
角度相关(欧拉角)
入门阶段,先了解Inspector面板中用来表示物体角度的欧拉角,并用欧拉角来描述物体的角度与旋转(欧拉角)
要注意!脚本里的 transform.rotation
和 transform.localRotation
都不使用和面板一致的 欧拉角 来表示物体的角度,而是用四元数!
得到物体的欧拉角数据需要用 transform.eulerAngles
或者 transform.localEulerAngles
在程序里,由于欧拉角描述的旋转存在不可避免且致命的缺陷,因此实际情况下描述旋转的数一般都是四元数,之后在基础阶段的四元数里解释这一切
相对世界坐标角度(欧拉角)
1 | this.transform.eulerAngles; |
相对父对象角度(欧拉角)
1 | this.transform.localEulerAngles; |
警告!!!通过.localEulerAngles
得到的角度不可能有负数,一定是0~360,这和面板显示的角度是不同的!!!
注意:设置角度和设置位置一样 不能单独设置xyz 要一起设置
如果我们希望改变的 角度 是面板上显示的内容 那一定是改变 相对父对象的角
1 | this.transform.localEulerAngles = new Vector3 (10, 10, 10); |
旋转相关
可以自己计算,在这里省略,方法和位置一样,参考自己改变位置方式(自己计算位移)即可,一般都是使用API来旋转
自转
第一种自转的重载方法:
- 第一个参数 相当于 每一帧旋转的角度
- 第二个参数 默认不填 就是相对于自己的坐标系 进行的旋转
1 | this.transform.Rotate(new Vector3(0, 10 * Time.deltaTime, 0)); |
相对于世界坐标系旋转
1 | this.transform.Rotate(new Vector3(0, 10, 0) * Time.deltaTime, Space.World); |
第二种自转的重载方法:
相对于某个轴 转多少度
- 参数一 相对哪个轴进行转动
- 参数二 转动的 角度 是多少
- 参数三 默认不填 就是相对于自己的坐标系 进行旋转
如果填 可以填写相对于 世界坐标系进行旋转
1 | this.transform.Rotate(Vector3.up, 10 * Time.deltaTime); //绕自己z轴每秒旋转10度 |
公转
相对于某一点转(公转)
- 参数一:绕着哪一个点 转圈圈
- 参数二:相对于点的哪一个轴转圈
- 参数三:转的度数 旋转速度 * 时间
1 | this.transform.RotateAround(Vector3.zero, Vector3.up, 10 * Time.deltaTime); //绕原点的z轴每秒旋转10度 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!