unity2019.3 所有控制按键输入方法 input 鼠标输入,键盘输入,触屏输入,屏幕点击事件,物体拖拽点击事件说明带实例 您所在的位置:网站首页 一起控制两个键盘怎么设置出来 unity2019.3 所有控制按键输入方法 input 鼠标输入,键盘输入,触屏输入,屏幕点击事件,物体拖拽点击事件说明带实例

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

2024-06-30 14:36| 来源: 网络整理| 查看: 265

配置按键

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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有