unity2019.3 所有控制按键输入方法 input 鼠标输入,键盘输入,触屏输入,屏幕点击事件,物体拖拽点击事件说明带实例

2023-11-19

配置按键

unity为满足跨平台需求支持多种输入方式,比较常见的有触屏、摇杆、鼠标、按键。
虽然unity可以直接在代码中直接指定某个按键的功能,但我们最好使用按键管理器来为项目配置输入操作。这是不仅是为了更好的统一管理,还是因为unity提供了更简单可控的配置方案,并且可以直接使用unity自带的输入设置工具提供给用户自行配置。当程序打包完成后,用户也可以在程序启动器的button setting处配置。但要使用这个功能,需要在项目打包的时候设置启动器。

在Edit->project setting -> input 处可以对按键细节进行设置:
在这里插入图片描述
扩展size ,即可添加按键配置。
Name:名称,调用或在外部设置的时候需要使用该名
Negative Button :缺省值为-1的按键
Positive Button :缺省值为1的按键
Alt Negative Button :备用的缺省值为-1的按键
Alt Positive Button :备用的缺省值为1的按键
Dead: 输入阈值, 触摸或者摇杆大于这个值才会触发输入
Gravity:表示松开按键时,从端点1或-1返回缺省值0时的速度
Sensitivity:按下按键时,从缺省值0到1或-1时的速度
Snap: 当触发反向操作时,当前值是否立即归零
Invet:是否取反值
Type:预设输入设备类型,可选键盘与鼠标按键、手柄、鼠标移动
Axis:装置选择,例如一个手柄有两个十字键两个摇杆,那么可以在这里设置当前设定作用于哪个装置
Joy Num: 手柄编号。指定连接的哪个设备
需要说明的是,在输入管理器中设置的输入基本上都是返回-1 - 1 区间的值。这比返回true false要好很多,因为优化输入体验的时候,比如我们希望根据按压力度来调整跳跃距离,又或者我们希望根据摇杆的摇摆程度来控制车辆的方向盘,都比较合适

鼠标控制

获取鼠标位置:
Input.mousePosition
点击事件:
鼠标按键ID:左键0,右键1,滚轮2
保持按下为true,随帧率多次触发:Input.GetMouseButton(0)
按下为true,只触发一次 :Input.GetMouseButtonDown(0)
释放为true,只触发一次:Input.GetMouseButtonUp(0)

//例:
void Update() {
	//获取位置
	Debug.Log("当前鼠标位置",Input.mousePosition);
	//点击
	if(Input.GetMouseButton(0))
		Debug.Log("点击");
}

场景中的鼠标事件:
与unity生命周期或是碰撞检测器的使用方法类似,但物体必须拥有碰撞检测组件collider,

OnMouseEnter(){}
OnMouseOver(){}
OnMouseExit(){}
OnMouseDown(){}
OnMouseUp(){}
OnMouseDrag(){}
OnMouseUpAsButton(){}

例:
void Update() {
}
void OnMouseEnter(){
	Debug.Log("鼠标进入了区域");
}
触摸控制

触摸控制略有特殊,因为涉及到多点控制。

Input.multiTouchEnabled //允许多点触控
Input.simulateMouseWithTouches
Input.touchCount //多点总数
Input.touches //多个记录触控点
Input.touchSupported
Input.GetTouch()
Touch myTouch = Input.touches[0]//获取当前第一个触点
myTouch.fingerId//触点id
myTouch.deltaPosition//触点移动距离
myTouch.deltaTime//触点经过时间
myTouch.tapCount//触点点击次数
myTouch.phase//触点状态

例:
private void Update()
{
	//判断当前是否有触点
    if (Input.touchCount > 0)
    {
    	Debug.Log("当前触点总数为:"+ Input.touchCount);
    	//获取第一个触点0,1就是第二个
    	Touch myTouch = Input.touches[0];
    	//fingerId用来辨别触点身份
    	Debug.Log("第一个触点的唯一id是:"+myTouch.fingerId) ;
    	//实时反馈当前触点位置与最先触碰时的位置距离
    	Debug.Log("当前触点移动了距离:"+myTouch.deltaPosition);
    	//实时反馈当前触点位置与最先触碰时的时间
    	Debug.Log("当前触点距离首次触碰时间经过了:"+myTouch.deltaTime );
    	//触点对象并不是手指抬起后立刻销毁,如果手指在同一位置快速点击,属于同一Touch对象
        //点击屏幕的次数
        Debug.Log("当前触点点击次数为:"+myTouch.tapCount );
        //当前触点的状态
        //Began 触碰开始,Moved 触碰后移动,Stationary触碰后不动,Ended 手指离开,Canceled 取消状态
         Debug.Log("当前触点状态为:"+myTouch.phase );
    }
}
按键控制

返回-1到1之间的float值:Input.GetAxis() 、
返回定点值-1,0,1或者摇杆的位置:Input.GetAxisRaw()
保持为true,随帧率触发:Input.GetButton(“a”)
按下为true,只触发一次:Input.GetButtonDown("")
释放为true,只触发一次:Input.GetButtonUp("")
点击为true,否则为false:Input.GetKey()

例:
void Update() {
		//直接输入Key值
        if (Input.GetKey("up"))
        //通过KeyCode类输入Key值
        if (Input.GetKey(KeyCode.UpArrow))
        //直接输入键盘按键名
        if(Input.GetKey("a"))   
        //数字按键
        if(Input.GetKey("1"))   
        //小键盘
        if(Input.GetKey("[1]"))   
        //功能键
        if(Input.GetKey("left shift"))   
        //鼠标 backspace
        if(Input.GetKey("mouse 0"))
        //特殊
        if(Input.GetKey("backspace"))
    }
拖拽事件

拖拽事件需要实现相关的事件接口。这个是我做的中间件脚本。可以方便的通过代码设置在指定物体上,通过委托直接赋予行为。

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

public class mDragEvent :  MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
    public delegate void OnBeginDrag_delegate(PointerEventData eventData);
    public event OnBeginDrag_delegate OnBeginDrag_event;
    public delegate void OnDrag_delegate(PointerEventData eventData);
    public event OnDrag_delegate OnDrag_event;
    public delegate void OnEndDrag_delegate(PointerEventData eventData);
    public event OnEndDrag_delegate OnEndDrag_event;
    void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("start");
        OnBeginDrag_event?.Invoke(eventData);
    }

    void IDragHandler.OnDrag(PointerEventData eventData)
    {
        Debug.Log("drag");
        OnDrag_event?.Invoke(eventData);
    }

    void IEndDragHandler.OnEndDrag(PointerEventData eventData)
    {
        Debug.Log("end");
        OnEndDrag_event?.Invoke(eventData);
    }
}

点击事件

点击事件需要实现相关的事件接口。这个是我做的中间件脚本。可以方便的通过代码设置在指定物体上,通过委托直接赋予行为。

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

public class mPointerEvent : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler
{
    public delegate void OnPointerClick_delegate(PointerEventData eventData);
    public event OnPointerClick_delegate OnPointerClick_evnet;
    
    public delegate void OnPointerDown_delegate(PointerEventData eventData);
    public event OnPointerDown_delegate nPointerDown_evnet;
    
    public delegate void OnPointerEnter_delegate(PointerEventData eventData);
    public event OnPointerEnter_delegate OnPointerEnter_evnet;
    
    public delegate void OnPointerExit_delegate(PointerEventData eventData);
    public event OnPointerExit_delegate OnPointerExit_evnet;
    
    public delegate void OnPointerUp_delegate(PointerEventData eventData);
    public event OnPointerUp_delegate OnPointerUp_evnet;
    void IPointerClickHandler.OnPointerClick(PointerEventData eventData)
    {
        if(OnPointerClick_evnet != null){
            this.OnPointerClick_evnet(eventData);
        }
    }

    void IPointerDownHandler.OnPointerDown(PointerEventData eventData)
    {
        if(nPointerDown_evnet != null){
            this.nPointerDown_evnet(eventData);
        }
    }

    void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData)
    {
        if(OnPointerEnter_evnet != null){
            this.OnPointerEnter_evnet(eventData);
        }
    }

    void IPointerExitHandler.OnPointerExit(PointerEventData eventData)
    {
        if(OnPointerExit_evnet != null){
            this.OnPointerExit_evnet(eventData);
        }
    }

    void IPointerUpHandler.OnPointerUp(PointerEventData eventData)
    {
        if(OnPointerUp_evnet != null){
            this.OnPointerUp_evnet(eventData);
        }
    }
}


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

unity2019.3 所有控制按键输入方法 input 鼠标输入,键盘输入,触屏输入,屏幕点击事件,物体拖拽点击事件说明带实例 的相关文章

  • html中图片热区链接怎么设置,html图像热区链接做好之后怎么上传到网页上让别人打开?...

    html图像热区链接做好之后怎么上传到网页上让别人打开 以下文字资料是由 历史新知网www lishixinzhi com 小编为大家搜集整理后发布的内容 让我们赶快一起来看一下吧 图像热区链接做好之后怎么上传到网页上让别人打开 做的是静态
  • 使用session实现同一账号只能同时一个人使用

    使用session实现同一账号只能同时一个人使用 今天我们要讲的就是 实现同一个账号只能同一时间让一个人使用 实现起来也是非常的简单 其实我这里讲到的是我前几天做出来的一个大概核心代码和核心思路 我也是查遍了很多网站 看了很多人的源码然后都
  • QT绘图之自动缩放画线和点

    需求 用 作为画板 把纸条缩放到 上 纸条长度不定 宽度固定 纸条上任意位置画点或者线 点距或者线距不固定 点数和线数也不固定 要成比例映射到 上直观显示 话不多说 上代码 ool sprayer Widget eventFilter QO
  • 导入Unity 2D Animation插件没有生效

    导入Unity 2D Animation后 打开Sprite Editor发现没有Skinning Editor选项 这可能是因为导入插件后与项目原有的Plugin下的库产生冲突导致的 这时候点击Packages Editor Unity
  • 线程和线程池

    线程和线程池 并发和并行 并发是指在单个CPU核心上 多个线程占用不同的CPU时间片 但由于每个线程占用的CPU时间片非常短 比如10ms 看起来就像是多个线程在共同执行一样 但在微观物理上看其实还是串行执行的 这样的场景称作并发 并行是指
  • QQ小程序服务器内部错误,网络

    网络 使用说明 在小程序 小游戏中使用网络相关的 API 时 需要注意下列问题 请开发者提前了解 1 服务器域名配置 每个QQ小程序需要事先设置一个通讯域名 小程序只可以跟指定的域名与进行网络通信 包括普通 HTTPS 请求 qq requ
  • 工作队列(workqueue)

    转载于 http blog csdn net angle birds article details 8448070 项目需要 在驱动模块里用内核计时器timer list实现了一个状态机 郁闷的是 运行时总报错 Scheduling wh
  • 仿鸟云IDC模板 最新修复创梦虚拟主机管理系统+主控模板+鸟云模板源码

    介绍 最近仿鸟云的 IDC 模板 好像很火 很早以前做了一个和鸟云早期的模板 但后来服务器没备份 数据丢失了 此为近期找到的一份新的鸟云源码 如果大家有需求 可以进行长期更新维护此套模板 做到更精 在 Global asa 文件的最后一行之
  • SpringBoot配置多个Redis数据源

    一 添加依赖
  • type traits浅析

    1 G2 9的type trait G2 9的type trait用一个泛化类模板来定义各种类型的属性 默认都是假的 然后给每一种类型都添加了偏特化版本 这样的缺点是每写一个类 都要添加一个偏特化的模板类 十分麻烦 2 C 改进的type
  • 渗透:vulnhub DC系列之DC1

    DC系列之DC1 一 靶机配置及说明 下载地址 https www vulnhub com entry dc 1 292 靶机 DC1 VMware IP 192 168 49 152 攻击机 kali2018 IP 192 168 49
  • 姿态估计与人体动作识别的多任务深度学习模型

    最近在做一个人体康复训练的项目 一开始考虑到人体康复训练需要肢体的细微动作 所以先使用人体姿态估计识算法提取骨骼点 再根据人体骨骼点来识别动作 后来发现也不一定这样 并组合成一个端对端的模型 正好找到了最近的一篇论文 2D 3D Pose
  • 使用QFile进行文件操作(QFile可以使用FILE *指针,还必须指定AutoCloseHandle)

    QFile类我我们提供了操作文件的常用功能 它是一种io设备 可以用来读写文本文件和二进制文件 也可以用来读写Qt的资源文件 QFile类可以单独使用 该类本身提供了read write函数 但更方便的方式是 将QFile和QTextStr
  • 毕业设计 2023-2024年最新软件工程专业毕设选题题目推荐汇总

    文章目录 0 简介 1 如何选题 2 最新软件工程毕设选题 0 简介 学长搜集分享最新的软件工程业专业毕设选题 难度适中 适合作为毕业设计 大家参考 学长整理的题目标准 相对容易 工作量达标 题目新颖 1 如何选题 最近非常多的学弟学妹问学
  • dell笔记本怎么开启虚拟化_dell台式电脑bios设置u盘启动的三种操作教程

    最近有小编发现有很多的网友朋友们并不知道dell怎么进入bios 为什么这么说呢 因为每个品牌怎么进入bios是不一样的 现在戴尔用户越来越多 不知道dell怎么进入bios的用户 接下来小编教你dell台式电脑bios设置u盘启动的三种操

随机推荐

  • uni-table多选获取当前行数据

    废话不多说 直接上代码
  • connect()函数

    connect 用于建立与指定socket的连接 头文件 include
  • RabbitMQ消息队列基础点

    消息队列 为什么使用消息队列 1 解耦 2 异步 3 削峰 消息队列的缺点 各种消息中间件的区别 消息丢失 如何保证消息的顺序性 如何解决消息队列的延时以及过期失效问题 消息队列满了以后该怎么处理 有几百万消息持续积压几小时 说说怎么解决
  • 安装bs4时出现问题

    安装bs4时出现问题 C Users xxia gt pip install bs4 Collecting bs4 Using cached bs4 0 0 1 tar gz 1 1 kB Preparing metadata setup
  • DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?

    2023年8月16日 18日 第14届中国数据库技术大会 DTCC 2023 于北京隆重召开 拓数派受邀参与本次大会 PieCloudDB 技术专家邱培峰在大会做了 云原生虚拟数仓 PieCloudDB ETL 方案设计与实现 的主题演讲
  • react脚手架配置别名并自动提示[VSCode]

    1 安装三方库 craco craco yarn add craco dev npm install craco craco save dev 2 配置craco config js const path require path modu
  • idea调整代码标签编辑器标签editor tabs的横排和竖排

    第一 找到任意一个文件鼠标右击 然后选择Configure Editor Tabs 如下图所示 第二 在tab placement中选择top left right bottom等即可调整标签位置 最后点击apply完成设置 最后结果如下图
  • python中,获取字符串的长度

    说明 与其他的语言一样 有时候需要查看或者说计算字符串的长度 在此记录下python中通过哪个函数实现 操作过程 1 通过len 函数返回字符串的长度 gt gt gt text python gt gt gt len text 6 gt
  • 投资不能只看概念,也要尝试使用

    目前 越来越多的行业开始应用聊天机器人ChatGPT 其中 一款免费的国内网站 多御浏览器 提供了安全快速 高效稳定的浏览器体验 该网站不仅提供了许多实用工具 包括当下非常流行的ChatGPT 也为开发人员和初学者提供了方便的在线工具解决方
  • 《Web安全基础》02. 信息收集

    web 1 CDN 绕过 1 1 判断是否有 CDN 服务 1 2 常见绕过方法 1 3 相关资源 2 网站架构 3 WAF 4 APP 及其他资产 5 资产监控 本系列侧重方法论 各工具只是实现目标的载体 命令与工具只做简单介绍 其使用另
  • 数据库数据导入的基本操作

    数据库数据导入的步骤 开发工具与关键技术 数据库 作者 邱慧敏 撰写时间 2019 01 27 数据库最基本的操作就是 如何导入数据 第一步 打开 登录 数据库 第二步 鼠标右键数据库 然后点击新建数据库 第三步 编程数据库名称 可 更改路
  • C++容器排序算法的简单应用

    功能实现 1 去掉所有重复的单词 2 按照单词的长度进行排序 3 统计长度等于或者超过6个字符的单词个数 4 按照单词的长度顺序进行输出 include
  • Ceph优化系列(一):Ceph架构及性能优化

    转载 Ceph架构及性能优化 对分布式存储系统的优化离不开以下几点 1 硬件层面 硬件规划 SSD选择 BIOS设置 2 软件层面 Linux OS Ceph Configurations PG Number调整 CRUSH Map 其他因
  • NoClassDefFoundError: org/springframework/cloud/client/loadbalancer/LoadBalancedRetryFactory

    异常信息 Exception in thread main java lang NoClassDefFoundError org springframework cloud client loadbalancer LoadBalancedR
  • CUDA异步执行与同步调试

    异步执行 默认情况下 GPU 操作是异步的 当您调用使用 GPU 的函数时 操作会被排入特定设备的队列 但不一定要等到稍后才会执行 这允许我们并行执行更多计算 包括在 CPU 或其他 GPU 上的操作 一般来说 异步计算的影响对调用者是不可
  • java基础-CAS、synchronized和AQS的理解

    乐观锁与悲观锁的区别 悲观锁 总是假设最坏的情况 每次去拿数据的时候都认为别人会修改 所以每次在拿数据的时候都会上锁 这样别人想拿这个数据就会阻塞直到它拿到锁 共享资源每次只给一个线程使用 其它线程阻塞 用完后再把资源转让给其它线程 传统的
  • Java数据库基础3

    行转列 首先我们默认的情况 每个名字都输出两次 而最终结果只有一次名字 所以肯定是 以名字分组 group by select from test 9 group by name 对我们来说 id 课程 和分数都不需要了 只需要有名字 然后
  • VMware设置centos7共享文件夹

    前言 VMware在设置centos6共享文件夹的时候 只需要安装vmware tools 然后在vmware里面配置共享文件夹即可 但是对于centos7 设置完之后 并不能如愿的将我们共享的目录显示在 mnt hgfs目录下 这里我们需
  • 新的征程

    十二生肖对应的五行 金 猴 鸡 木 虎 兔 水 鼠 猪 火 蛇 马 土 牛 龙 羊 狗 纳音五行如下 甲子乙丑海中金 甲午乙未沙中金 丙寅丁卯炉中火 丙申丁酉山下火 戊辰己巳大林木 戊戌己亥平地木 庚午辛未路旁土 庚子辛丑壁上土 壬申癸酉剑
  • unity2019.3 所有控制按键输入方法 input 鼠标输入,键盘输入,触屏输入,屏幕点击事件,物体拖拽点击事件说明带实例

    配置按键 unity为满足跨平台需求支持多种输入方式 比较常见的有触屏 摇杆 鼠标 按键 虽然unity可以直接在代码中直接指定某个按键的功能 但我们最好使用按键管理器来为项目配置输入操作 这是不仅是为了更好的统一管理 还是因为unity提