Unity物体全方位旋转

  大家好!我是小唐,在 做项目中经常会有需求对物体,模型进行旋转操作。下面就分享一下。

  下面的脚本是通过对Input.GetAxis()分别获取鼠标在水平和垂直方向的增量,然后计算鼠标移动的距离,以此来确定模型被旋转的角度,以及阻尼效果的大小。通过Rigid()函数得出旋转速度的增量,以实现平缓的旋转效果。把下面的脚本附加到被旋转的物体上,即可实现物体的全方位旋转。

代码如下:

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour
{
    ///


    /// 是否被拖拽
    ///

    private bool Ondrag = false;           

    ///


    /// 旋转速度
    ///

    public float Speed = 6f;             

    ///


    /// 阻尼速度
    ///

    private float Tempspeed;             

    ///


    /// 鼠标沿水平方向移动的增量
    ///

    private float Axisx;                 

    ///


    /// 鼠标沿竖直方向移动的增量
    ///

    private float Axisy;                    

    ///


    /// 鼠标移动的距离
    ///

    private float Cxy;                      

    ///


    /// 接受鼠标按下的事件
    ///

    void OnMouseDown()
    {                                       
        Axisx = 0f;
        Axisy = 0f;
    }

    ///


    /// 鼠标拖拽时的操作
    ///

    void OnMouseDrag()                      
    {
        Ondrag = true;

        //获得鼠标增量
        Axisx = -Input.GetAxis("Mouse X");  
        Axisy = Input.GetAxis("Mouse Y");

        //计算鼠标移动的长度
        Cxy = Mathf.Sqrt(Axisx * Axisx + Axisy * Axisy);
        if (Cxy == 0f)
        {
            Cxy = 1f;
        }
    }

    ///


    /// 计算阻尼速度
    ///

    ///
    float Rigid()                                    
    {
        if (Ondrag)
        {
            Tempspeed = Speed;
        }
        else
        {
            if (Tempspeed > 0)
            {
                //通过除以鼠标移动长度实现拖拽越长速度减缓越慢
                Tempspeed -= Speed * 2 * Time.deltaTime / Cxy;
            }
            else
            {
                Tempspeed = 0;
            }
        }
        return Tempspeed;
    }

    void Update()
    {
        gameObject.transform.Rotate(new Vector3(Axisy, Axisx, 0) * Rigid(), Space.World);

        if (!Input.GetMouseButton(0))
        {
            Ondrag = false;
        }
    }
}

程序员就是如此的苦逼,慢慢的熬吧,总有那么一天,你想的那一天。——小唐

 

 

你可能感兴趣的:(Unity技术)