UG4L13——输入处理
UG4L13——输入处理
本章代码关键字
1 | Stage.isTouchOnUI //判断是否点在了UI上 |
判断是否点在了UI上
注意:全屏界面,没有设置穿透时,空白区域也是接受输入的,只要是ture
,那就一定是有UI遮挡
1 | void Start() |
输出:
获取指向的UI对象
1 | void Start() |
输出:
鼠标/触摸相关事件
-
鼠标(左中右键)/手指 按下
如果想要获取是哪个键按下了,需要使用有参方法作为委托,通过传入的
EventContext
参数使用inputEvent.button
获取按下的哪个键1
2
3
4
5
6
7TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");
panel.m_btnTest.onTouchBegin.Add((data) =>
{
print("按下");
//如果想要获取鼠标哪个键按下:0左键 1右键 2中键
print(data.inputEvent.button);
});按下按钮时(没有抬起时)就会输出:
-
鼠标/手指 移动
移动 一定是先按下过后 才会响应的,可用于制作拖曳的逻辑
如果要得到鼠标移动的坐标,需要使用带
EventContext
参数的委托,对传入的EventContext
参数通过inputEvent.x/y
得到移动位置
注意!得到是物理屏幕坐标,如果想要使用UI坐标需要使用GRoot.inst.GlobalToLocal()进行一次转换1
2
3
4
5
6
7
8
9
10
11
12TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");
panel.m_btnTest.onTouchBegin.Add((data) =>
{
print("按下");
//如果想要获取鼠标哪个键按下:0左键 1右键 2中键
print(data.inputEvent.button);
});
panel.m_btnTest.onTouchMove.Add((data) =>
{
print("移动");
print(new Vector2(data.inputEvent.x, data.inputEvent.y));
});在按下按钮时移动输出:
-
鼠标/手指 抬起
1
2
3
4
5TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");
panel.m_btnTest.onTouchEnd.Add((data) =>
{
print("抬起");
});在按下按钮并抬起后输出:
-
点击
点击是按下并直接抬起后才算点击,如果按下后移动则即使抬起也不算点击
关于按钮的点击的之前的描述可见:gButton.onClick.Add()
1
2
3
4
5TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");
panel.m_btnTest.onClick.Add(() =>
{
print("点击");
});按下按钮并直接抬起(不能移动)后输出:
-
鼠标右键点击
FGUI提供了一个直接监听鼠标右键是否点击的方法,同样,如果按下后移动则即使抬起也不算点击
1
2
3
4
5TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");
panel.m_btnTest.onRightClick.Add(() =>
{
print("右键点击");
});对按钮右键点击后(不能移动)输出:
-
鼠标或手指进入元件
如果想要获取进入了哪个元件,需要使用带
EventContext
参数的委托,
通过sender
属性去获取发生事件的元件,再转为GObject
去获取名字1
2
3
4
5
6
7
8
9
10void Start()
{
TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>(
panel.m_btnTest.onRollOver.Add(InObject);
}
private void InObject(EventContext eventData)
{
print("进入了某个对象" + (eventData.sender as GObject).name);
}鼠标进入元件后输出:
-
鼠标或手指离开元件
如果想要获取离开了哪个元件,需要使用带
EventContext
参数的委托,
通过sender
属性去获取发生事件的元件,再转为GObject
去获取名字1
2
3
4
5
6
7
8
9
10
11
12
13void Start()
{
TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");
panel.m_btnTest.onRollOut.Add((eventData) =>
{
print("离开了某个对象" + (eventData.sender as GObject).name);
});
}
private void InObject(EventContext eventData)
{
print("进入了某个对象" + (eventData.sender as GObject).name);
}鼠标离开元件后输出:
获取当前鼠标或者手指的位置
注意!得到的都是物理屏幕坐标,如果想要使用UI坐标需要使用GRoot.inst.GlobalToLocal()进行一次转换
-
Stage.inst.touchPosition
鼠标位置或者最后一个手指的位置返回FairyGUI坐标系的坐标,得到是物理屏幕坐标,如果想要使用UI坐标需要使用GRoot.inst.GlobalToLocal()进行一次转换
1
2
3
4void Update()
{
print(Stage.inst.touchPosition);
}输出:
-
Stage.inst.GetTouchPosition()
获取指定手指位置,参数是手指ID,从0开始,按照按下去的顺序分配手指ID返回FairyGUI坐标系的坐标,得到是物理屏幕坐标,如果想要使用UI坐标需要使用GRoot.inst.GlobalToLocal()进行一次转换
1
2
3
4void Update()
{
print(Stage.inst.GetTouchPosition(0));
}输出:
多点触摸
-
Stage.inst.touchCount
当前按下手指数量1
int num = Stage.inst.touchCount;
-
Stage.inst.GetAllTouch(null)
获得当前所有按下的手指id1
int[] touchIDs = Stage.inst.GetAllTouch(null);
-
Input.multiTouchEnabled 关闭多点触控
1
Input.multiTouchEnabled = false;
手势
-
长按
如果要对某个控件监听长按手势,实例化
LongPressGesture
类然后对构造函数传入控件
最后通过onAction.Add()
添加监听方法即可1
2
3
4
5
6TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");
LongPressGesture gesture = new LongPressGesture(panel.m_btnTest);
gesture.onAction.Add(() =>
{
print("长按");
});当长按按钮时输出:
-
手指滑动
如果要对某个控件监听手指滑动手势,实例化
SwipeGesture
类然后对构造函数传入控件
最后通过onAction.Add()
添加监听方法即可1
2
3
4
5SwipeGesture gesture1 = new SwipeGesture(panel.m_btnTest);
gesture1.onAction.Add(() =>
{
print("手指滑动");
}); -
两指缩放
如果要对某个控件监听两指缩放手势,实例化
PinchGesture
类然后对构造函数传入控件
最后通过onAction.Add()
添加监听方法即可1
2
3
4
5PinchGesture gesture2 = new PinchGesture(panel.m_btnTest);
gesture2.onAction.Add(() =>
{
print("两指缩放");
}); -
两指旋转
如果要对某个控件监听两指旋转手势,实例化
RotationGesture
类然后对构造函数传入控件
最后通过onAction.Add()
添加监听方法即可1
2
3
4
5RotationGesture gesture3 = new RotationGesture(panel.m_btnTest);
gesture3.onAction.Add(() =>
{
print("两指旋转");
});
键盘输入
该功能主要提供没有监听键盘输入的引擎使用的,在Unity中我们可以不用在意该方法
获取键盘输入的是哪个键,需要使用带EventContext
参数的方法,通过inputEvent.keyCode
来获取
1 | Stage.inst.onKeyDown.Add((data) => |
按下按键时输出: