Unity鼠标控制物体的旋转、移动、缩放等

2023-10-27

这个是控制相机:(44条消息) unity 相机 旋转缩放查看 物体或地图_unity旋转查看物体_野区捕龙为宠的博客-CSDN博客

下面的是控制物体本身:

知识点:

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

Input.GetKey(KeyCode.Mouse2)//按下滚轮键

尊重原著:Unity鼠标控制物体的旋转、移动、缩放等_unity 获取鼠标移动距离_Cuijiahao的博客-CSDN博客



方法一:

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);
    }
}
 

方法二:

尊重原著:Unity中通过鼠标实现移动、缩放、旋转_unity 鼠标旋转缩放_rich22851716的博客-CSDN博客

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseControlModel02 : MonoBehaviour
{
    public float RotateXSpeed = 1;//旋转速度
    public float RotateYSpeed = 1;

    public float xSpeed = 1;//移动位置速度
    public float ySpeed = 1;
    float posX;
    float posY;
    public float translateSensity = 1;
    float mousX;
    float mousY;
    public float nomalscale = 0.5f;
    public float MouseWheelSensitivity = 0.9f;//放大缩小  速度
    public float MouseZoomMinx = 0.2f;
    public float MouseZoomMax = 2f;
    protected GameObject obj;
    public bool isRotate = true;
    void Start()
    {

    }
    void FixedUpdate()
    {
        posX = this.gameObject.transform.localPosition.x;
        posY = this.gameObject.transform.localPosition.y;

        if (this.gameObject.transform.localScale != new Vector3(0.000001f, 0.000001f, 0.000001f))
        {
            if (Input.GetMouseButton(1))
            {
                if (isRotate)
                {
                    mousX = Input.GetAxis("Mouse X");
                    mousY = Input.GetAxis("Mouse Y");
                    this.transform.Rotate(mousY * RotateYSpeed, -mousX * RotateXSpeed, 0, Space.World);
                }
                else
                {
                }
            }

            if (Input.GetAxis("Mouse ScrollWheel") != 0)
            {
                if (nomalscale >= MouseZoomMinx && nomalscale <= MouseZoomMax)
                {
                    nomalscale += Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity;
                }
                if (nomalscale < MouseZoomMinx)
                {
                    nomalscale = MouseZoomMinx;
                }
                if (nomalscale > MouseZoomMax)
                {
                    nomalscale = MouseZoomMax;
                }
                this.transform.localScale = new Vector3(nomalscale, nomalscale, nomalscale);
            }
            if (Input.GetKey(KeyCode.Mouse2))
            {
                posX += Input.GetAxis("Mouse X") * xSpeed * translateSensity;
                posY += Input.GetAxis("Mouse Y") * ySpeed * translateSensity;
                Vector3 pos = new Vector3(posX, posY, this.gameObject.transform.localPosition.z);
                this.gameObject.transform.localPosition = pos;
            }
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity鼠标控制物体的旋转、移动、缩放等 的相关文章

  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • 微信小程序实现车牌号键盘

  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge
  • 游戏开发中常见系统梳理之背包系统的实现一

    游戏中几乎都存在大大小小的背包系统 接下来我将讲述背包系统具体是如何实现的 完整源码 以下是使用unity NGUI实现 使用txt配置的方法 后续更新UGUI Json实现的背包系统敬请期待 背包中的物品我们常常将其制作成预设体 通过改变

随机推荐

  • 基于CT117E的按键控制流水灯

    这是在流水灯的基础上加上关于按键的程序 使前两个按键一个可以控制流水灯的移动方向 一个可以控制流水灯的移动速度 1 先在流水灯的基础上添加关于按键的头文件 2 添加关于按键的宏定义 3 在在主函数中添加检测按键程序和按键处理程序 4 在初始
  • Android平台的兼容相关概念详细整理

    设置应用的支持版本 通过我们会在文件夹下 指定下面属性 来表示我们应用所支持的Android版本
  • Summary of OpenGL ES 3.0 Programming Guide

    零 OpenGLES简介 OpenGLES 是用于嵌入式系统的一个3D图形编程接口规范 支持IOS Android Linux Windows WebGL 一 渲染管线 1 VertexBufferArrayObject 2 VertexS
  • Python 高级变量类型,函数进阶 day05

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 int 浮点型 float 布尔型 bool 真 True 非 0 数 非零即真 假 Fal
  • 命名空间system中不存在data_我理解中的Unity DOTS

    我是第一次接触到 ECS 并不是使用老手 以下仅仅是我通过浏览相关文章和实现相关 Demo 而写出的一篇分享初见文 如有错误 请您指出 谢谢 因为本身就是忠实的 Overwatch 玩家 所以天然的对其应用的 ECS 架构有所兴趣 再加上最
  • 流文件保存到本地的两种方法

    1 FileStream fs new FileStream path FileMode Create fs Write ImageBuff 0 ImageBuff Length fs Close 注释 ImageBuff 图片流 byte
  • HEX(Xilinx MCS)文件格式详解

    文章目录 自己定义个文件格式 HEX文件格式详解 HEX 文件是指以hex为后缀 采用Intel HEX编码规则的文件 可以直接使用文本编辑工具打开 通常用来对微控制器或ROM进行编程 本质上都是对存储器编程 其中包含了每个地址对应的数据
  • QT connect()连接函数的一点说明

    QObject connect中的signal和slot函数一定要有参数类型 但是 不可以有参数名 指定信号和方法时 必须使用SIGNAL 和SLOT 宏 例如 关联信号和槽函数 connect configureWindow SIGNAL
  • MySQL索引失效场景实例演示

    文章目录 一 环境信息 二 表 数据准备 三 复合索引的失效情况 最左前缀法则 or查询 四 单列索引的失效情况 like模糊查询使用前通配符 索引列上使用函数 字符串索引没加引号 使用 lt gt gt lt is null 或 is n
  • Jenkins安装与配置

    什么是CICD CI CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法 CI CD 的核心概念是持续集成 持续交付和持续部署 作为一个面向开发和运营团队的解决方案 CI CD 主要针对在集成新代码时所引发的问题 亦称 集成
  • Ubuntu16.04下基于Docker的Caffe-GPU版本环境搭建总结

    Caffe的GPU环境搭建在docker支持下并不困难 但是过程比较杂 所需依赖如下 本文会说明安装方法 帮助大家少走弯路 GNU Linux x86 64 with kernel version gt 3 10 Docker gt 1 9
  • 这是一个更新版本服务代码python

    import win32serviceutil import win32service import win32event import os import logging import inspect import time from u
  • 【计算机网络】实验报告三:Cisco Packet Tracer 实验

    Cisco Packet Tracer 实验 1 直接连接两台 PC 构建 LAN 2 用交换机构建 LAN 3 交换机接口地址列表 4 生成树协议 Spanning Tree Protocol 5 路由器配置初步 6 静态路由 7 动态路
  • 1045 快速排序

    著名的快速排序算法里有一个经典的划分过程 我们通常采用某种方法取一个元素作为主元 通过交换 把比主元小的元素放到它的左边 比主元大的元素放到它的右边 给定划分后的 N 个互不相同的正整数的排列 请问有多少个元素可能是划分前选取的主元 例如给
  • typora高亮_用Typora实现写作排版一体化

    用Typora实现写作排版一体化 一般的推文制作过程 大概都是在本地word写好文案以后 再导入到第三方的推文编辑器中进行排版 最后再黏贴到微信的图文素材编辑器里生成图文发布 经常看到许多公众号文章充满花里胡哨的元素 大概都是因为使用了推文
  • SpringBoot整合Elasticsearch(最新最全,高效安装到使用)

    文章目录 一 安装Elasticsearch相关插件 1 选择版本 2 安装Elasticsearch 3 安装node 4 安装grunt 5 安装es head插件 6 安装kibana 7 安装ik分词器 二 整合SpringBoot
  • 从零开始学编程——DOS命令

    一 DOS操作系统 DOS 英文 Disk Operating System 是一款由微软早期推出的磁盘操作系统 可以通过一系列dos命令直接对硬盘文件进行增删改查 DOS和windiws的最大不同之处在于它是一个字符式操作系统 所有的操作
  • Oracle 表空间查询与操作方法

    一 查询篇 1 查询oracle表空间的使用情况 select b file id 文件ID b tablespace name 表空间 b file name 物理文件名 b bytes 总字节数 b bytes sum nvl a by
  • 自动化办公更简单了:新版python-office,有哪些更新?

    职场经验谈 大家好 这里是程序员晚枫 小破站 小红薯都叫这个名 去年4月开源了一个Python自动化办公项目 python office GitHub和Gitee都能看到 1行代码实现复杂的自动化办公任务 帮助不懂代码的小白 快速使用Pyt
  • Unity鼠标控制物体的旋转、移动、缩放等

    这个是控制相机 44条消息 unity 相机 旋转缩放查看 物体或地图 unity旋转查看物体 野区捕龙为宠的博客 CSDN博客 下面的是控制物体本身 知识点 Input GetMouseButton 0 获取鼠标输入 参数为一个int值