Unity UGUI系列十 EventSystem 和Input

2021-11-24  本文已影响0人  合肥黑
一、Event System

参考
【Unity学习笔记】事件系统EventSystem

第一次在Unity中创建UI元素时,总会自动生成一个EventSystem物体,它包含三个组件:Transform、EventSystem、Standalone Input Module。如果我们把它删除了,会发现UI上的事件(比如点击、拖拽)将不会被检测到。没错,它就是用来处理UI相关的事件的。

EventSystem基于输入给物体发送事件,它在整个事件系统中扮演的主要角色是:

1.First Selected

一开始默认选中的物体

2.Send Navigation Events

事件系统是否允许导航事件(移动/提交/取消)。如果取消了,按上下左右就不能切换选中项了。

3.Drag Threshold

拖拽操作的容限区域(以像素为单位)。
即鼠标当前帧和上一帧达到此值,才会响应拖拽事件

4.Standalone Input Module

Input Module是事件系统运行逻辑的主要所在,它主要用于:

在EventSystem中,同一时刻只能激活一个Input Module,并且此组件必须挂载到EventSystem组件相同物体上才能有效。

在Inspector面板上,它的前四个属性是用来设置移动、提交和取消按钮的,Input Module会在这些按钮触发时将事件发送给选中的物体。这里的值要设置为Input Manager(Edit->Project Setting->Input Manager)面板中已有的值。

二、输入及虚拟轴

参考
unity --19 输入及虚拟轴

早期游戏开发时候,都选用这种模式,通过分别对鼠标或者键盘的按钮判断来执行:

为了解决不同控制设备之间的差异(键盘左右,或者摇杆左右操作逻辑相同),再加上玩家有自定义按键的需求,因此unity建议不使用第一种传统输入法(代码写死了),而是提供了虚拟按键,即虚拟输入轴。这样脚本代码访问虚拟输入轴,而虚拟轴和真实的控制设备绑定,间接访问来达到统一兼容的目的。

Edit => project setting => input,点击input之后会在unity右 上角显示你要设置的新的输入轴所有的按键设置InputManager。


image.png
image.png

虚拟输入还有一个好处: 现代游戏的输入和早期游戏不太一样,早期游戏中,上,下,左,右等都是离散的状态,可以直接用0,1,2等表示;而现代游戏输入往往具有中间状态,比如轻触按钮是“走”,连续按住不放是“加速跑”,它需要形如0.1,0.3,0.5,1等多级梯度。使用unity的虚拟输入,哪怕是键盘也能模拟多级梯度,当我们按住“A”键时,这个键绑定的虚拟轴的值会逐渐从0增加到1。

public class Axis : MonoBehaviour {

    void Start () {

    }

    void Update () {
        //Horizontal是控制水平方向的值,也就是x轴的值
        //GetAxisRaw方法获取虚拟轴,当某键按下时会直接返回1或-1,没有变化过程
        float x1 = Input.GetAxisRaw("Horizontal");
        //GetAxis方法获取虚拟轴会有一个变化过程
        float x2 = Input.GetAxis("Horizontal");
        //Vertical是控制垂直方向的值,也就是z轴的值
        float y = Input.GetAxis("Vertical");
        //利用Translate方法来控制gameobject移动
        transform.Translate(new Vector3(x1,0,y)*Time.deltaTime);
    }
}
三、键盘事件

返回bool值,传入参数是键名称或KeyCode值
Input.GetKey 某个键是否被持续按下
Input.GetKeyDown 某个键是否被按下
Input.GetKeyUp 某个键是否被弹起

if(Input.GetKey('a'))
{
}
if(Input.GetKey(KeyCode.A))
{
}
四、鼠标

返回bool值,传入参数0是左键/1是右键/2是中键

Input.mousePosion 鼠标位置获取

if(Input.GetMouseButton(0))
{
   GameObject Cube = GameObject.Find("Cube");
   Cube.transform.localScale += new Vector3(1,1,1);
}
五、移动设备输入

Input.touchCount
最后一帧有多少根手指触碰。不同设备能追踪到的数量不同,苹果最多支持五根手指

Input.touches 存储每根手指状态的数组,可以通过索引来访问每根手指的一些信息

finggerId 触摸的唯一索引

position 这根手指当前所在的屏幕位置

deltaPosition 自上一帧这根手指屏幕位置变化,二维向量

上一篇 下一篇

猜你喜欢

热点阅读