当前位置:   article > 正文

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

unity怎么做触屏按键
配置按键

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("点击");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

例:
void Update() {
}
void OnMouseEnter(){
	Debug.Log("鼠标进入了区域");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
触摸控制

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

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
按键控制

返回-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"))
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
拖拽事件

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

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
点击事件

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

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


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
官方文档:https://docs.unity3d.com/ScriptReference/Input.html
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/91818
推荐阅读
相关标签
  

闽ICP备14008679号