using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CameraAction : MonoBehaviour {
 
    
    public float mouseScrollSpeed = 40, //滚滚轮放大缩小速度
        mouseDragSpeed1 = 10, //单单按右键旋转的速度
        mouseDragSpeed2 = 1.26f;//按中键移动的速度
    public Vector3 mouseLastPosition = new Vector3(0, 0, 0), //“上一次”光标的位置
        mousePositionDelta = new Vector3(0, 0, 0);//光标位置变化量,等于现在光标位置减上一次光标的位置
    Vector3 rotateDelta = new Vector3(0, 0, 0);//单单按鼠标右键旋转相机的速度
    public Texture2D m_texture2D1, m_texture2D2, m_texture2D3, m_texture2D4;//光标图案
 
    private void FixedUpdate()
    {
        MouseEvents();
    }
    void MouseEvents()
    {
        //按住鼠标右键拖动
        if (Input.GetMouseButton(1))
        {
            mousePositionDelta = Input.mousePosition - mouseLastPosition;
            mouseLastPosition = Input.mousePosition;
            if (mousePositionDelta.magnitude != 0)
            {
                rotateDelta = new Vector3(-mousePositionDelta.y * Time.deltaTime * mouseDragSpeed1,
                mousePositionDelta.x * Time.deltaTime * mouseDragSpeed1, 0);
                //按Alt+鼠标右键
                if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
                {
                    this.transform.Translate(new Vector3(0, 0, Time.deltaTime * mouseScrollSpeed * (rotateDelta.x + rotateDelta.y)), Space.Self);
                    Cursor.SetCursor(m_texture2D4, new Vector2(5, 5), CursorMode.ForceSoftware);
                }
                //单单按鼠标右键
                else
                {
                    transform.eulerAngles += rotateDelta;
                    Cursor.SetCursor(m_texture2D1, new Vector2(5, 5), CursorMode.ForceSoftware);
                }
            }
        }
        //按住鼠标中键拖动
        else if (Input.GetMouseButton(2))
        {
            mousePositionDelta = Input.mousePosition - mouseLastPosition;
            mouseLastPosition = Input.mousePosition;
            if (mousePositionDelta.magnitude != 0)
            {
                rotateDelta = new Vector3(-mousePositionDelta.x * Time.deltaTime * mouseDragSpeed2,
                  -mousePositionDelta.y * Time.deltaTime * mouseDragSpeed2, 0);
                transform.Translate(rotateDelta, Space.Self);
 
                Cursor.SetCursor(m_texture2D3, new Vector2(5, 5), CursorMode.ForceSoftware);
            }
        }
        //如果没有按鼠标除了滚滚轮的键,则实时更新光标“上一次”的位置mouseLastPosition
        else
        {
            mouseLastPosition = Input.mousePosition;//重新赋初值
            Cursor.SetCursor(m_texture2D2, new Vector2(5, 5), CursorMode.ForceSoftware);//更改鼠标图标
        }
        //滚轮——放大缩小
        if (Input.mouseScrollDelta.y != 0)//滚轮滚了多少
            transform.Translate(new Vector3(0, 0, Time.deltaTime * mouseScrollSpeed * Input.mouseScrollDelta.y), Space.Self);
    }
}

Unity中实现Scene模式下的鼠标操作效果相关推荐

  1. 原来在UNITY中使用system.io下的所有函数都可以用相对路径 : Assets/xx

    原来在UNITY中使用system.io下的所有函数都可以用相对路径 : Assets/xx 代码如下图,这样就不用在绝对路径和相对路径之间不断转换了. 想要得到绝对路径时就傅 Application ...

  2. Unity中获取一个物体下所有的子物体的方法

    Unity中获取一个物体下所有的子物体的方法 方法1(获取全部子物体,无论子物体SetActive是否为true): using System.Collections; using System.Co ...

  3. linux dd 编辑,Vim编辑器中,在命令模式下的dd命令是用来( )。

    Vim编辑器中,在命令模式下的dd命令是用来( ). 更多相关问题 下列说法中不正确的是()A.-1的立方根是-1B.0的平方根与立方根相等C.-4的平方根是±2D.每个数都有一个立方 设s=11+1 ...

  4. Linux中vim的三种命令格式,及命令模式下常见的操作

    目录 什么是vim 三种命令模式,以及相互转换 命令模式下的文本操作 什么是vim Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性 三种命令模式,以 ...

  5. 鼠标在linux下如何工作,Linux操作系统下的鼠标操作

    本不想写这些玩意儿,其实我并不喜欢它们,只不过没办法,谁叫我是靠这些家伙糊口的呢! 若干年前,我自认为很喜欢Linux操作系统:若干年后,我发现我当初是何等的天真. 恩,一分钱,一分货!我坚信这一点! ...

  6. unity中2D飞机游戏手指触屏操作的问题

    unity中2D飞机游戏手指触屏操作的问题 菜鸡记录一下在项目中遇到的坑 下面就是我用的代码 if (UnityEngine.Input.touchCount > 0) //每一帧触摸到的屏幕的 ...

  7. 华为使用计算机投屏要打开什么,华为P20投屏开启电脑办公模式,键盘鼠标操作更方便...

    原标题:华为P20投屏开启电脑办公模式,键盘鼠标操作更方便 随着手机功能越来越强,甚至具备一定的办公能力,传统电脑打开率越来越低.手机会不会在某天取代电脑呢?华为新近推出的旗舰机型如P20配套手机投屏 ...

  8. pyqtgraph 在Opengl模式下开启抗锯齿效果

    pyqtgraph 在Opengl模式下开启抗锯齿效果 修改pyqtgraph源码文件pyqtgraph/widgets/GraphicsView.py def useOpenGL(self, b=T ...

  9. Linux CentOS系统 图形模式下,鼠标键盘操作没有响应

    1.前言 最近在和同事一起在linux CentOS系统下部署项目,由于同事不知道执行了什么不当操作,改变了系统的权限(权限可能是被修改,也可能是被删除了),改变的权限有可能是用户权限,也可能是其它权 ...

最新文章

  1. 在线作图|小基因组——线粒体基因组圈图
  2. Linux mail 命令参数
  3. 万能系统卸载器免root_这下舒服了!一键卸载安卓全机型预装应用
  4. 你心中有这样的人吗?
  5. php栏目树,php生成无限栏目树的代码实例分享
  6. angular 居中_Angular 的模块间通信
  7. php回滚实例_thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例
  8. Spring文件中的xsd文件
  9. 华为手机上的计算机怎么没了,华为手机怎么连接电脑 华为手机连接不上电脑怎么回事 华为手机连接USB没反应...
  10. 怎么裁剪PDF页面,PDF如何调整页面大小
  11. cocos2dx 特效 3D特效
  12. 著者四角号码查询_著者姓名汉语拼音与四角号码数字混编书次号的应用
  13. PTA 【java】7-2 将数组中的数逆序存放 (20 分)
  14. 计算机组成原理——指令系统(课程笔记)
  15. 2022最新独立版智狐聚合支付v1.0.5.21_聚合支付系统源码
  16. 树莓派4B爽上流安装python3的OpenCV(人脸检测识别—门禁“环境搭建篇”)
  17. 关于网站在不同的网络访问不了的原因
  18. GDB调试之定位段错误
  19. python爬取付费漫画_python selenium爬取kuku漫画
  20. linux 网卡驱动升级,安装或更新CentOS平台的网卡驱动程序

热门文章

  1. 山东一高校发挥专业所长 加速建造超4600平米隔离区(给自己学校点赞)
  2. 线条边框简笔画图片大全_关于冬天的简笔画图片大全
  3. 性能优化之思路和分析
  4. 跳过TPM 2.0检测无损在Win10的基础上升级成Windows 11
  5. 深入学习ProGuard之:ProGuard简介与android的应用
  6. android proguard 不起作用,Android-ProGuard 混淆
  7. android版本5.1怎么升级到6.1,华为EMUI3.1新版本开发版5.9.1更新内容
  8. nlog官方帮助_NLog使用方法
  9. Mysql--主键和外键,范式和表与表的关系
  10. 二战考研,决心启程 第一天