unity2019.3 新版 输入方法 input 鼠标输入,键盘输入,触屏输入说明带实例

配置按键

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"))
    }
官方文档:https://docs.unity3d.com/ScriptReference/Input.html
发布了134 篇原创文章 · 获赞 37 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/lengyoumo/article/details/103905728
今日推荐