当前位置 博文首页 > unity工具人的博客:Unity3D鼠标拖拽控制节点绕任意轴旋转的实现

    unity工具人的博客:Unity3D鼠标拖拽控制节点绕任意轴旋转的实现

    作者:[db:作者] 时间:2021-07-20 12:36

    using UnityEngine;
    using System.Collections;
    
    public class RotationScript : MonoBehaviour
    {
        private bool onDrag = false; //是否被拖拽//
        public float speed = 6f; //旋转速度// 
        private float tempSpeed; //阻尼速度// 
        private float axisX; //鼠标沿水平方向移动的增量// 
        private float axisY; //鼠标沿竖直方向移动的增量// 
        private float cXY; //鼠标移动的距离//
    
    
        void OnMouseDown(){ //接受鼠标按下的事件// 
            print("OnMouseDown");
            axisX =0f;
            axisY =0f;
        }
    
        void OnMouseDrag () //鼠标拖拽时的操作// 
        {
            print("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)//速度大于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);//全方位旋转
    
            //gameObject.transform.Rotate(new Vector3(gameObject.transform.rotation.x, axisX, 0) * Rigid(), Space.World);//只围绕y轴旋转
            if (!Input.GetMouseButton (0)) {
                onDrag = false;
            }
    
            **********************************下方的判断是为了实现--点击屏幕任意位置都可对物体进行拖拽--的效果**************************
            //else if (Input.GetMouseButtonDown(0))//点击鼠标左键时
            //{
            //    axisX = 0f;
            //    axisY = 0f;
            //}
            //else if (Input.GetMouseButton(0))//持续按住鼠标左键时
            //{            
            //    MouseMove();
            //}
        }
    
        public void MouseMove()//拖拽
        {
            onDrag = true;
            axisX = -Input.GetAxis("Mouse X"); //获得鼠标增量// 
            axisY = Input.GetAxis("Mouse Y");
            cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY); //计算鼠标移动的长度// 
            if (cXY == 0f)
            {
                cXY = 1f;
            }
        }
    }
    

    鸣谢~原文网址:https://wenku.baidu.com/view/d4ea6a1c4431b90d6c85c7fb.html

    cs