0、旋转的三种方式
1、矩阵旋转
2、欧拉旋转 会造成万向节锁问题
3、四元数旋转 可避免万向节锁现象
1、方法1 Transform.rotation / Transform.localRotation 旋转角度
void Update()
{
if (Input.GetMouseButtonDown(0))
{
print("物体的原始旋转信息:" + transform.eulerAngles);
transform.rotation = Quaternion.Euler(30, 30, 30);
print("物体的当前旋转信息:" + transform.eulerAngles);
}
}
2、方法2 Transform.Rotate 旋转
void Update()
{
if (Input.GetMouseButtonDown(0))
{
print("物体的原始旋转信息:" + transform.eulerAngles);
transform.Rotate(new Vector3(45, 45, 45), Space.Self);
print("物体的当前旋转信息:" + transform.eulerAngles);
}
}
3、方法3 Transform.RotateAround 围绕旋转
void Update()
{
if (Input.GetMouseButtonDown(0))
{
print("物体的原始旋转信息:" + transform.eulerAngles);
transform.RotateAround(Point.position, Vector3.forward, 45);
}
}
4、方法4 Quaternion.identity 恒等式旋转(就是无旋转)
void Update()
{
if (Input.GetMouseButtonDown(0))
{
print("物体的原始旋转信息:" + transform.eulerAngles);
transform.rotation = Quaternion.identity;
print("物体的当前旋转信息:" + transform.eulerAngles);
}
}
5、方法5 Quaternion.AngleAxis 角轴
void Update()
{
if (Input.GetMouseButtonDown(0))
{
print("物体的原始旋转信息:" + transform.eulerAngles);
transform.rotation = Quaternion.AngleAxis(45, Vector3.up);
print("物体的当前旋转信息:" + transform.eulerAngles);
}
}
6、方法6 Quaternion.ToAngleAxis 转化为角轴
void Update()
{
if (Input.GetMouseButtonDown(0))
{
print("物体的原始旋转信息:" + transform.eulerAngles);
float angle;
Vector3 axis;
transform_a.rotation.ToAngleAxis(out angle, out axis);
transform_b.rotation = Quaternion.AngleAxis(angle, axis);
}
}
7、方法7 Transform.LookAt 注视
void Update()
{
transform.LookAt(transform_a);
}
8、方法8 Quaternion.LookRotation 注视旋转
void Update()
{
Vector3 lookDir = transform_a.position - transform.position;
transform.rotation = Quaternion.LookRotation(lookDir);
}
9、方法9 Quaternion.FromToRotation 从from到to旋转
void Update()
{
Vector3 from = Vector3.one;
Vector3 to = Vector3.right;
transform.rotation = Quaternion.FromToRotation(from, to);
}
10、方法10 Quaternion.Lerp 球形插值(参数3不能为负)
void Update()
{
transform.rotation = Quaternion.Lerp(transform.rotation, transform_a.rotation, Time.time * 0.1f);
}
11、方法11 Quaternion.Slerp 球形插值(参数3不能为负)
void Update()
{
transform.rotation = Quaternion.Slerp(transform.rotation, transform_a.rotation,Time.time * 0.1f);
}
12、方法12 Quaternion.RotateTowards 转向(参数3为负将反转)
void Update()
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, transform_a.rotation, -Time.time * 0.1f);
}
13、方法13 Quaternion.Inverse 求反
void Update()
{
transform.rotation = Quaternion.Inverse(transform_a.rotation);
}
14、应用
void Update()
{
}