Unity开发备忘录000009:鼠标交互

一. 鼠标的基本事件(返回Bool值)

1. 按下事件:Input.GetMouseButtonDown()

    例:if (Input.GetMouseButtonDown(0))  

              Debug.Log("按下鼠标左键");  

2. 抬起事件:Input.GetMouseButtonUp()

    例:if (Input.GetMouseButtonUp(1))

               Debug.Log("抬起鼠标右键");

3. 长按事件:Input.GetMouseButton()

    例:if (Input.GetMouseButton(2))

               Debug.Log("长按鼠标中键");

注:事件参数0、1、2分别代表鼠标左键、右键和中键。

二. 鼠标虚拟轴

    下拉菜单设置 Edit → Project Settings → Input

    Unity开发备忘录000009:鼠标交互

    1. 获取鼠标横向(x轴)移动增量  

        Input.GetAxis(“Mouse x”)

    2. 获取鼠标竖向(y轴)移动增量  

        Input.GetAxis(“Mouse y”)

    3.获取鼠标滚轮旋转增量  

        Input.GetAxis("Mouse ScrollWheel")

三. 按鼠标左键移动对象

        void MouseMove()

        {    

            mouseX = Input.GetAxis("Mouse X");    

            mouseY = Input.GetAxis("Mouse Y");    

            if (Input.GetMouseButton(0))    

            {

                   // 在前面声明移动的方向:Vector3 mouseMoveDirection;

                  // 在前面声明移动的速度:float velocity;  

                  mouseMoveDirection = new Vector3(mouseX,mouseY,0) * velocity;                 

                  mouseObject.Translate(mouseMoveDirection);

            }

        }

四. 按鼠标右键旋转对象

        void MouseRotate()

        {

            mouseX = Input.GetAxis("Mouse X");    

            mouseY = Input.GetAxis("Mouse Y");    

            if (Input.GetMouseButton(1))    

            {        

                 // 在前面声明旋转大小:float rotate;

                mouseObject.transform.Rotate(Vector3.down, mouseX * rotate);    // 围绕Y轴旋转    

                mouseObject.transform.Rotate(Vector3.right, mouseY * rotate);     // 围绕X轴旋转

            }

        }

五. 滚动鼠标滚轮缩放对象

        void MouseScale()

        {    

            if (Input.GetAxis("Mouse ScrollWheel") != 0)    

            {        

                 // 在前面声明缩放比例:float scale;

                scale += Input.GetAxis("Mouse ScrollWheel");        

                mouseObject.transform.localScale = new Vector3(1,1,1)* scale;    

            }

        }

六. 射线检测控制游戏对象

    通过射线检测实现鼠标的屏幕2D坐标向空间3D坐标的转换,见下图。

Unity开发备忘录000009:鼠标交互

    例:鼠标选择对象并拖拽其移动

        void MouseRay()

        {        

                Ray ray;        

                ray = Camera.main.ScreenPointToRay(Input.mousePosition);        

                if (Input.GetMouseButton(0))        

                {            

                        RaycastHit hit;            

                        if (Physics.Raycast(ray, out hit)&& hit.transform.tag == "cube")            

                        {                

                                Debug.DrawLine(transform.position, hit.point); // 调试时,在Scene窗口画出射线

                                hit.transform.GetComponent<Renderer>().material.color = Color.red; // 点击对象,使对象变成红色                

                                obj.transform.position = new Vector3(hit.point.x, hit.point.y, obj.transform.position.z);  // 移动对象         

                        }            

                        else                

                                obj.GetComponent<Renderer>().material.color = Color.white;   // 点击非对象区域,使对象回复到白色

               }

          }

 

 

 

老孙课堂:https://ke.qq.com/course/410293?tuin=56cb7596

工程源码1下载:https://download.csdn.net/download/sunbowen63/11139223

工程源码2下载:https://download.csdn.net/download/sunbowen63/11139265

相关文章: