Unity model mouse control the rotation (360 °)

Arbitrary rotation:


            /// <summary>
            /// 起始位置
            /// </summary>
            private Vector3 StartPosition;
            /// <summary>
            /// 鼠标按下的之前位置
            /// </summary>
            private Vector3 previousPosition;
            /// <summary>
            /// 鼠标按下之后的滑动距离
            /// </summary>
            private Vector3 offset;
            /// <summary>
            /// 鼠标抬起后距离初始位置的位置
            /// </summary>
            private Vector3 finalOffset;
            void Update()
            {
                if (Input.GetMouseButtonDown(0))    // Input.GetMouseButtonDown(0) 当0键被按下一次
                {
                    StartPosition = Input.mousePosition;
                    previousPosition = Input.mousePosition;
                }
                if (Input.GetMouseButton(0))       // Input.GetMouseButton(0) 当0键被按住持续侦测(包含down和up各一次)
                {
                    offset = Input.mousePosition - previousPosition;
                    previousPosition = Input.mousePosition;
                    Vector3 Xoffset = new Vector3(offset.x, -offset.y, 0);
                    transform.Rotate(Vector3.Cross(Xoffset, Vector3.forward).normalized, offset.magnitude, Space.World);
                }
                if (Input.GetMouseButtonUp(0))  //Input.GetMouseButtonUp(0) 当0键放开一次
                {
                    finalOffset = Input.mousePosition - StartPosition;
                    isSlide = true;
                    angle = finalOffset.magnitude;
                }
            }

Defining a y-axis:

    public Canvas strCanvas;
    /// <summary>
    /// 起始位置
    /// </summary>
    private Vector3 StartPosition;
    /// <summary>
    /// 鼠标按下的之前位置
    /// </summary>
    private Vector3 previousPosition;
    /// <summary>
    /// 鼠标按下之后的滑动距离
    /// </summary>
    private Vector3 offset;
    /// <summary>
    /// 鼠标抬起后距离初始位置的位置
    /// </summary>
    private Vector3 finalOffset;
    void Update()
    {

            //if (Input.GetMouseButtonDown(0))
            //{
            //    StartPosition = Input.mousePosition;  //记录鼠标按下的时候的鼠标位置
            //    previousPosition = Input.mousePosition;  //记录下当前这一帧的鼠标位置
            //}
            //if (Input.GetMouseButton(0))
            //{
            //    offset = Input.mousePosition - previousPosition; //这一帧鼠标的位置减去上一帧鼠标的位置就是鼠标的偏移量 
            //    previousPosition = Input.mousePosition; //再次记录当前鼠标的位置,以备下一帧求offset使用。
            //    Vector3 Xoffset = new Vector3(offset.x, 0, 0);//过滤掉鼠标在Y轴方向上的偏移量,只保留X轴的
            //    transform.Rotate(Vector3.Cross(Xoffset, Vector3.forward).normalized, offset.magnitude, Space.World);  //旋转
            //}
            //if (Input.GetMouseButtonUp(0))
            //{
            //    finalOffset = Input.mousePosition - StartPosition;  //鼠标松开时记录最后的鼠标位置
            //    isSlide = true;  //设为true说明想在鼠标松开后让物体继续旋转一顶焦度
            //    angle = finalOffset.magnitude; //松开鼠标后需要继续旋转的角度,这个值是随着游戏的update调用一直在递减,否则会一直旋转下去
            //}
            //if (isSlide)   //实现松掉鼠标后,还会继续旋转一段距离。如果想在停止后继续旋转的话就执行下面的代码
            //{
            //    Vector3 XfinalOffset = new Vector3(finalOffset.x, 0, 0);
            //    transform.Rotate(Vector3.Cross(XfinalOffset, Vector3.forward).normalized, angle * 2 * Time.deltaTime, Space.World);
            //    if (angle > 0)  //下面就是递减控制,防止无限旋转
            //    {
            //        angle -= 5;
            //    }
            //    else
            //    {
            //        angle = 0;
            //    }
            //}
    }

 

 

Published 23 original articles · won praise 13 · views 10000 +

Guess you like

Origin blog.csdn.net/qq_42047805/article/details/100102371