前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >鼠标控制物体旋转、移动、缩放(Unity3D)

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

作者头像
恬静的小魔龙
发布于 2022-08-07 01:34:23
发布于 2022-08-07 01:34:23
4.5K11
代码可运行
举报
文章被收录于专栏:Unity3DUnity3D
运行总次数:1
代码可运行

一、前言

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); 欧拉角转化为四元数

三、代码分享

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
}

谢谢大家!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
除了“if (Input.GetMouseButton(0))”这块是某种特殊需求,其他还是可以拿来就用的,赞
除了“if (Input.GetMouseButton(0))”这块是某种特殊需求,其他还是可以拿来就用的,赞
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
unity3d:模型跟随鼠标运动,旋转
立羽
2023/08/24
4671
unity3d模拟Scene视图camera控制
中键滚动,camera前进后退 右键拖动,camera原地旋转 中键拖动,camera上下左右平移
立羽
2023/08/24
2690
u3d拖动摄像机视角与双指缩放
立羽
2023/08/24
3730
unity摄像机控制篇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
1.4K0
Unity3d:摇杆移动,第三人称镜头控制
两个手指都没按在UI上,取这一帧与上一帧的距离的平方差值,不能取平方根插值,多了性能消耗
立羽
2023/08/24
2870
鼠标滚轮控制摄像头Unity 3d实现
float mousX = Input.GetAxis("Mouse X") * roate_Speed;//得到鼠标横向移动距离
用户7043603
2022/02/24
7140
Unity第三人称视角解决方案
镜头跟随 在实现第三人称时,镜头问题困扰了我一整天,参考了官方的脚本 SmoothFollow,虽然能实现镜头跟在人物身后,但是发现几个问题。 脚本实现太繁琐,有几个属性目前根本就用不到。 人物旋转时不能控制摄像机跟着旋转,也就是说,不能让镜头一直跟在人物身后。 脚本代码如下: public class SmoothFollow : MonoBehaviour { // The target we are following [SerializeField] private Transfo
xferris
2018/06/01
2.7K0
unity中用UGUI實現在UI界面鼠標旋轉三維物體
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
5530
物体交互操作之鼠标拖动物体任意移动(Unity3D)
&emsp; 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧。
恬静的小魔龙
2022/08/07
2.8K0
物体交互操作之鼠标拖动物体任意移动(Unity3D)
[Unity3d]虚拟3D汽车展示项目
今天完善成了虚拟3D汽车展示项目的部分功能,虽然用的汽车模型有点粗糙,但感觉还不错,下面我就贴下源码供初学者学习!
py3study
2020/01/14
1.1K0
unity3d:控制模型单指旋转,双指缩放,并停止控制一段时间后自转
立羽
2023/08/24
5330
【Unity3D】鼠标拖拽物体实现任意角度自旋转
Unity3d鼠标拖拽物体实现任意角度自旋转 主要涉及函数 Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量 Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长度,长度越长旋转越快 在project setting--Input 可以设置 代码分享 UnityEngine; System.Collections; public void startRoate : MonoBehaviour { private bool
恬静的小魔龙
2020/03/11
4.9K1
【Unity3D】鼠标拖拽物体实现任意角度自旋转
Unity摄像机基本操作详解:移动、旋转与缩放
在Unity开发中,摄像机(Camera)是至关重要的组件。它不仅决定了玩家视角,还直接影响到游戏的视觉体验。一个流畅且功能丰富的摄像机控制系统,能让玩家更加沉浸于游戏世界。本文将围绕一个示例代码,深入探讨Unity中摄像机的基本操作,包括移动、旋转和缩放。我们将从基本定义出发,详细解析涉及的API,并结合示例代码进行实际演示,帮助开发者构建高效的摄像机控制系统。
Front_Yue
2025/03/13
3670
Unity摄像机基本操作详解:移动、旋转与缩放
游戏开发者使用code buddy能做成什么样? C# Unity
其实,腾讯的code buddy (下文简称为buddy) 和现在大多数的AI辅助编程一样,都是帮助各位IT行业的小伙伴更加高效的编辑代码(make your life better ),目前是免费的阶段(**个人版免费** 企业版与专业版收费详见官网).使用方法与cursor类似.在代码编辑器扩展中安装,然后登陆账号.即可开始使用.使用是很简单的,但是如何去用,也是一门学问.
张曙光
2025/05/13
1240
游戏开发者使用code buddy能做成什么样? C# Unity
Unity 从UI中拖拽对象放置并拖动[通俗易懂]
需求:点击UI,在场景中生成3D对象,对象跟随鼠标移动,放置后可再次拖拽对象,改变其位置。做了一个小Demo,如下图所示:
全栈程序员站长
2022/09/10
2.9K0
Unity 从UI中拖拽对象放置并拖动[通俗易懂]
Unity - 在鼠标点击的位置放置对象
你可以使用函数实例化多个给定的游戏对象或预制对象。 Instantiate (Object Target, object’s position, object’s rotation)或者Instantiate (Object Target)。
hrscy
2018/08/30
5.5K0
Unity - 在鼠标点击的位置放置对象
【Unity3D】物体跟随鼠标移动
在Update中运行 Vector3 mousePos=Camera.main.ScreenToWorldPoint(Input.mousePosition)+new Vector3(0,0,10); 这行代码的意思是屏幕坐标转化为三维坐标,然后z轴加10就是正确的位置了 transform.position=mousePos; 当前坐标跟随鼠标移动
恬静的小魔龙
2020/03/11
2.2K0
【Unity3D】物体跟随鼠标移动
如何实现RTS游戏中鼠标在屏幕边缘时移动视角功能
本文简单介绍如何在Unity中实现即时战略游戏中鼠标在屏幕边缘的时候移动视角的功能,如图所示:
CoderZ
2022/12/26
1.3K0
如何实现RTS游戏中鼠标在屏幕边缘时移动视角功能
【Unity3D】鼠标射线点击,UI出现在鼠标点击的位置
创建一条射线Ray需要指明射线的起点(origin)和射线的方向(direction)。这两个参数也是Ray的成员变量。注意,射线的方向在设置时如果未单位化,Unity 3D会自动进行单位归一化处理。射线Ray的构造函数为 :
恬静的小魔龙
2020/03/10
5.5K0
【Unity】第一人称视角开发
我的需求是在Unity构建一个第一人称视角,实现移动跳跃功能。 主要参考的是这篇博文提供的方案,不过该方案为了只允许一次跳跃,单独在人物底部构建了一个空对象,我无需此限制,因此对其进行了简化。
zstar
2022/11/16
1K0
【Unity】第一人称视角开发
推荐阅读
相关推荐
unity3d:模型跟随鼠标运动,旋转
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验