【转】Unity3d实现物体围绕某一点进行旋转

1,让一个物体围绕某一点旋转,有几种方法?分别是什么?

答:在这个点处放一个空物体B,则问题变为A绕着B旋转,

方法1:B不动,A挂脚本实现transform的RotateAround(vector3 point, vector3 axis, float angle)函数

例如 A.RotateAround(B.position, Vector3.up,  30*Time.deltaTime);   //A绕着B的y轴进行旋转。

方法2:A不动,A作为B的子物体,B挂脚本实现自转,然后带着A转,类似于模拟围绕中心天体旋转。

例如:B.Rotate (Vector3.up, 30*Time.deltaTime, Space.Self); //B绕着自身的up方向自转,从而带着A一起转。

方法3:矩阵变换,研究中。       

注:旋转的常用方法:

(1)绕坐标轴旋转

[csharp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public void Rotate (Vector3 eulerAngles, Space relativeTo = Space.Self);  

或者

public void Rotate (float xAngle, float yAngle, float zAngleSpace, relativeTo = Space.Self);

其中relativeTo = Space.Self表示绕自身坐标系旋转,ralativeTo = Space.World表示绕世界坐标系旋转。

(2)饶某个向量旋转

public void Rotate(Vector3 axis, float angle, Space relativeTo);

其中axis为旋转轴方向,angle为旋转角度,relativeTo为参考坐标系,默认为Space.self。此方法的功能是使得GameObject对象在relativeTo坐标系中绕轴向量axis旋转angle度。

(3)绕轴点旋转

[csharp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public void RotateAround(Vector3 point, Vector3 axis, float angel);  

功能是使得GameObject对象绕着point点的axis方向旋转angle度。

原文地址:https://www.cnblogs.com/mimime/p/6754444.html