Unity之绕轴进⾏旋转的操作
先上⼀张效果图
using UnityEngine;
using System.Collections;
public class TestRotateRound : MonoBehaviour
{
public GameObject Sphere;
private float curtTime = 0.0f;
void Update()
{
//使⽤C#封装好的代码RotateAround
//⾃⼰封装代码,功能和上⾯的相同
//ansform.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.ansform.position);
}
}
补充:Unity绕x轴旋转并限制⾓度的陷阱
在制作FPS相机时,遇到了需要限制⾓度的需求,视⾓只能查看到-60到60度的范围,⽽在Unity的Transform组件中,绕x轴逆时针旋转,Transform组件的localEulerAngle会在0~360范围内递增(如图)
关键在于其中的⾓度转换,直接上代码
public static void RotateClampX(this Transform t, float degree, float min, float max)
{
degree = (t.localEulerAngles.x - degree);
if (degree > 180f)
{
float up
degree -= 360f;
}
degree = Mathf.Clamp(degree, min, max);
t.localEulerAngles = t.localEulerAngles.SetX(degree);
}
补充:Unity3D 实现物体始终⾯向另⼀个物体(绕轴旋转、四元数旋转)
⼀开始本⼈纠结于在VR中,怎么利⽤⼿柄来控制物体的旋转,物体位置不变。
相当于:地球仪。更通俗点来说,就是⼀个棍⼦插到地球仪上,然后拿着棍⼦就可以控制地球仪转。⼿柄相当于那根棍⼦。
代码如下:
这句代码实现了 myTransform 始终可以根据 target 旋转,rotationSpeed控制速度。
当然上⾯这句话仅仅只是始终⾯向,还没有加上⼀开始记录下target的初始旋转。不然⼀开始就要跟着⼿柄转,⽽不是⾃⼰随意控制。对于上句的理解,我理解完便贴上。以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。