## 先上一张效果图

```using UnityEngine;
using System.Collections;
public class TestRotateRound : MonoBehaviour
{
public GameObject Sphere;
private float curtTime = 0.0f;
void Update()
{
//使用C#封装好的代码RotateAround
gameObject.transform.RotateAround(Sphere.transform.position, Sphere.transform.up, 72 * Time.deltaTime);
//自己封装代码,功能和上面的相同
//RotateAround(Sphere.transform.position,Vector3.up, 72 * Time.deltaTime);
}
private void RotateAround(Vector3 center, Vector3 axis, float angle)
{
//绕axis轴旋转angle角度
Quaternion rotation = Quaternion.AngleAxis(angle, axis);
//旋转之前,以center为起点,transform.position当前物体位置为终点的向量.
Vector3 beforeVector = transform.position - center;
//四元数 * 向量(不能调换位置, 否则发生编译错误)
Vector3 afterVector = rotation * beforeVector;//旋转后的向量
//向量的终点 = 向量的起点 + 向量
transform.position = afterVector + center;
//看向Sphere,使Z轴指向Sphere
transform.LookAt(Sphere.transform.position);
}
}
```

## 关键在于其中的角度转换，直接上代码

```        public static void RotateClampX(this Transform t, float degree, float min, float max)
{
degree = (t.localEulerAngles.x - degree);
if (degree > 180f)
{
degree -= 360f;
}
degree = Mathf.Clamp(degree, min, max);
t.localEulerAngles = t.localEulerAngles.SetX(degree);
}
```

## 代码如下：

`myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);`