Unity之繞軸進行旋轉的操作

先上一張效果圖

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);
    }
}

補充: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)
            {
                degree -= 360f;
            }
            degree = Mathf.Clamp(degree, min, max);
            t.localEulerAngles = t.localEulerAngles.SetX(degree);
        }

補充:Unity3D 實現物體始終面向另一個物體(繞軸旋轉、四元數旋轉)

一開始本人糾結於在VR中,怎麼利用手柄來控制物體的旋轉,物體位置不變。

相當於:地球儀。更通俗點來說,就是一個棍子插到地球儀上,然後拿著棍子就可以控制地球儀轉。手柄相當於那根棍子。

代碼如下:

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

這句代碼實現瞭 myTransform 始終可以根據 target 旋轉,rotationSpeed控制速度。

當然上面這句話僅僅隻是始終面向,還沒有加上一開始記錄下target的初始旋轉。不然一開始就要跟著手柄轉,而不是自己隨意控制。對於上句的理解,我理解完便貼上。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀:

    None Found