鼠标控制物体旋转、移动、缩放(Unity3D)

简介: Unity3D对于鼠标操作物体的旋转、移动、缩放的功能点使用的比较多。今天就分享如何使用Unity实现鼠标对于物体的旋转、移动、缩放。

一、前言

Unity3D对于鼠标操作物体的旋转、移动、缩放的功能点使用的比较多。

今天就分享如何使用Unity实现鼠标对于物体的旋转、移动、缩放。

效果图:

网络异常,图片无法展示
|


二、知识点

  • Input.GetMouseButton(0)

获取鼠标输入,参数为一个int值 为0的时候获取的是左键

  • Input.GetMouseButton(1)

为1的时候获取的是右键

  • Input.GetMouseButton(2)

为2的时候获取的是中键(就是那个滑轮)

  • Input.GetMouseButton

鼠标按压

  • Input.GetMouseButtonUp

鼠标点击

  • Input.GetMouseButtonDown

鼠标松开

  • Camera.main.ScreenToWorldPoint

屏幕坐标转化为世界坐标

  • Quaternion rotation = Quaternion.Euler(0, 0, 0);

欧拉角转化为四元数


三、代码分享

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseControlModel : MonoBehaviour
{
    //旋转最大角度
    public int yMinLimit = -20;
    public int yMaxLimit = 80;
    //旋转速度
    public float xSpeed = 250.0f;
    public float ySpeed = 120.0f;
    //旋转角度
    private float x = 0.0f;
    private float y = 0.0f;
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            //将屏幕坐标转化为世界坐标  ScreenToWorldPoint函数的z轴不能为0,不然返回摄像机的位置,而Input.mousePosition的z轴为0
            //z轴设成10的原因是摄像机坐标是(0,0,-10),而物体的坐标是(0,0,0),所以加上10,正好是转化后物体跟摄像机的距离
            Vector3 temp = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10));
            transform.position = temp;
        }
        else if (Input.GetMouseButton(1))
        {
            //Input.GetAxis("MouseX")获取鼠标移动的X轴的距离
            x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
            y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
            y = ClampAngle(y, yMinLimit, yMaxLimit);
            //欧拉角转化为四元数
            Quaternion rotation = Quaternion.Euler(y, x, 0);
            transform.rotation = rotation;
        }
        else if (Input.GetAxis("Mouse ScrollWheel") != 0)
        {
            //鼠标滚动滑轮 值就会变化
            if (Input.GetAxis("Mouse ScrollWheel") < 0)
            {
                //范围值限定
                if (Camera.main.fieldOfView <= 100)
                    Camera.main.fieldOfView += 2;
                if (Camera.main.orthographicSize <= 20)
                    Camera.main.orthographicSize += 0.5F;
            }
            //Zoom in  
            if (Input.GetAxis("Mouse ScrollWheel") > 0)
            {
                //范围值限定
                if (Camera.main.fieldOfView > 2)
                    Camera.main.fieldOfView -= 2;
                if (Camera.main.orthographicSize >= 1)
                    Camera.main.orthographicSize -= 0.5F;
            }
        }
    }
    //角度范围值限定
    static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360)
            angle += 360;
        if (angle > 360)
            angle -= 360;
        return Mathf.Clamp(angle, min, max);
    }
}
复制代码

谢谢大家!



相关文章
|
10天前
|
图形学 开发者
unity 获取鼠标跟键盘
在 Unity 中,鼠标和键盘输入的获取依赖于底层操作系统的输入系统。操作系统捕获硬件事件(如鼠标的移动、点击及键盘按键),并将其转化为输入事件。Unity 通过 Input 类封装这些事件,使开发者能便捷地访问鼠标和键盘数据。例如,`Input.GetAxis` 方法用于获取鼠标滚轮、X/Y 轴移动及键盘方向键的输入,简化了开发流程。 代码示例展示了如何使用 `Input.GetAxis` 获取鼠标滚轮、左右和上下移动,以及键盘的方向键输入,并根据这些输入进行相应的处理和物体移动。
|
10天前
|
图形学
unity判断鼠标在不在UI上
在 Unity 中,判断鼠标是否在 UI 上主要依赖事件系统和射线检测机制。Unity 的事件系统负责处理输入事件,GraphicRaycaster 组件用于检测射线与 UI 元素的相交情况。通过 `EventSystem.current.IsPointerOverGameObject()` 方法可轻松判断鼠标是否在 UI 上。对于移动端,使用 `EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)` 来判断触摸是否在 UI 上。代码实现简单且高效。
|
11天前
|
图形学
Unity UGUI实现鼠标拖动图片
在 Unity UGUI 中实现鼠标拖动图片功能,主要涉及事件检测、坐标转换和物体位置更新。根据鼠标移动量更新图片位置。代码示例展示了如何通过这些步骤实现拖动效果。
|
6月前
|
图形学
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
|
6月前
|
图形学
小功能⭐️Unity动态更换天空盒、旋转天空盒
小功能⭐️Unity动态更换天空盒、旋转天空盒
|
6月前
|
图形学
小功能⭐️不用传参,Unity获得鼠标悬浮处的物体、UI!
小功能⭐️不用传参,Unity获得鼠标悬浮处的物体、UI!
|
6月前
|
图形学
Unity精华☀️一、从旋转到万向锁之:Unity的旋转
Unity精华☀️一、从旋转到万向锁之:Unity的旋转
|
图形学
unity判断鼠标在不在UI上
unity判断鼠标在不在UI上
【Unity3D--自由观察模型】模型自动旋转+触屏旋转和缩放
展示3D模型,同时实现模型自动旋转和触屏旋转和缩放
559 0
|
图形学
unity基础-坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
unity基础-坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
453 0