unity 关于位置移动旋转等
四元数与向量
-
欧拉角旋转
if (GUILayout.RepeatButton("沿X轴旋转")) { //Vector3 euler = transform.eulerAngles; //欧拉角 没有 方向 和 大小的概念。 //x y z 沿某个轴的旋转角度 transform.eulerAngles += new Vector3(1, 0, 0); } if (GUILayout.RepeatButton("沿Y轴旋转")) { transform.eulerAngles += Vector3.up; } if (GUILayout.RepeatButton("沿Z轴旋转")) { transform.eulerAngles += Vector3.forward; }
}
}`
- 四元数 旋转
if (GUILayout.RepeatButton("沿X轴旋转")) { transform.rotation *= Quaternion.Euler(1, 0, 0); //transform.Rotate(1, 0, 0); //Rotate通过四元数实现 } }
private void Start()
{
Quaternion qt = transform.rotation;
//1. 四元数 --> 欧拉角
Vector3 euler = qt.eulerAngles;
//2.欧拉角 --> 四元数
Quaternion qt02 = Quaternion.Euler(0, 90, 0);
//3.轴 / 角 旋转
//transform.rotation = Quaternion.AngleAxis(30, Vector3.up);
//transform.localRotation = Quaternion.AngleAxis(30, Vector3.up);
}
public Transform target;
private void Update()
{
//4. 注视旋转
//Quaternion dir = Quaternion.LookRotation(target.position - transform.position);
//transform.rotation = dir;
//transform.LookAt(target.position);
//5.Lerp 差值旋转 由快到慢
//transform.rotation = Quaternion.Lerp(transform.rotation, dir, 0.1f);
//6.RotateTowards 匀速旋转
//transform.rotation = Quaternion.RotateTowards(transform.rotation, dir, 0.1f);
//Quaternion dir = Quaternion.Euler(0, 180, 0);
//transform.rotation = Quaternion.Lerp(transform.rotation, dir, 0.005f);
////7. 四元数计算角度差
//if (Quaternion.Angle(transform.rotation, dir) < 30)
// transform.rotation = dir;
//8. 从?到?的旋转
transform.rotation = Quaternion.FromToRotation(Vector3.right, target.position - transform.position);