您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 代码编程 >
    鼠标拖拽旋转物体
    时间:2015-06-25 10:38 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印


    在游戏开发中,我们经常需要通过鼠标拖拽对模型进行旋转的操作,这里我介绍一种实现方法:


    using UnityEngine;
    using System.Collections;
    
    public class Dragrotate : MonoBehaviour
    {
        private bool Ondrag = false;             //是否被拖拽//
    
        public float Speed = 6f;                 //旋转速度//
    
        private float Tempspeed;                 //阻尼速度//
    
        private float Axisx;                     //鼠标沿水平方向移动的增量//
    
        private float Axisy;                     //鼠标沿竖直方向移动的增量//
    
        private float Cxy;                       //鼠标移动的距离//
    
        /// <summary>
        /// 接受鼠标按下的事件
        /// </summary>
        void OnMouseDown()
        {
            Axisx = 0f;
            Axisy = 0f;
        }
    
        /// <summary>
        /// 鼠标拖拽时的操作
        /// </summary>
        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;
            }
    
        }
    
    }


    本算法通过Input.Getaxis ()分别获取鼠标在水平和垂直方向的增量,然后计算鼠标移动的距离,

    以此来确定模型被旋转的角度,以及阻尼效果的大小。通过Rigid()函数得出旋转速度的增量,以实现平缓的旋转效果。


    把本脚本附加到希望被旋转的模型,即可实现鼠标控制模型的全方位旋转。




    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。