1、拖拽
- 最简单的方式 ,在UI组件**On Click()**拖拽游戏物体~选择方法
- 另一种方式添加Event Trigger组件,选择UI事件,拖拽游戏物体,选择方法
2、代码添加
首先脚本挂在空物体上,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public class UIEvent : MonoBehaviour
{
public GameObject btnGo;
public GameObject sliderGo;
public GameObject dropDownGo;
// Start is called before the first frame update
void Start()
{
btnGo.GetComponent<Button>().onClick.AddListener(this.ButtonOnClick);
btnGo.GetComponent<Slider>().onValueChanged.AddListener(this.SliderOnClick);
btnGo.GetComponent<Dropdown>().onValueChanged.AddListener(this.DropDownOnClick);
}
void ButtonOnClick()
{
Debug.Log("ButtonOnClick");
}
void SliderOnClick(float value)
{
Debug.Log("SliderOnClick");
}
void DropDownOnClick(Int32 value)
{
Debug.Log("DropDownOnClick");
}
// Update is called once per frame
void Update()
{
}
}
然后指定一个Button,点击按钮就会执行代码中方法
3、通过实现接口
这些接口可以通过API~Scripting-Event System-Supported Events来进行查找_仅限于UGUI
有些接口是依赖于其他接口存在的,如果不执行事件函数,可能是没有实现其依赖的接口,如:要想执行IDragHandler接口的事件函数,必须实现IDragHandler接口 |
---|
1、//进入该区域时调用
IPointerEnterHandler
2、//离开该区域是调用
IPointerExitHandler
3、//按下时调用
IPointerDownHandler
4、//抬起时调用
IPointerUpHandler
5、//按下并抬起时调用,例如按钮的点击
IPointerClickHandler
6、//拖动开始时调用,并且可以取到拖动的方向
IBeginDragHandler
7、//当发生拖动时调用拖动对象
IDragHandler
8、//在拖动完成时调用拖动对象
IEndDragHandler
9、//在拖动完成的对象上调用
IDropHandler
10、//当鼠标滚轮滚动时调用
IScrollHandler
11、//当对象成为选定对象时调用,只针对Selectable起作用
ISelectHandler
12、//取消选择,由于只能选择一个Selectable,当选择新的后,之前的选择就会回调取消选择事件
IDeselectHandler
13、//选择后,可监听上下左右、WSAD方向键。如果访问eventData.moveDir,可以取到具体移动的方向
IMoveHandler
14、//当按下提交按钮时调用
ISubmitHandler
15、//当按下取消按钮时调用
ICancelHandler
16、//在找到拖动目标时调用,可用于初始化值(拖动初始化,只表示滑动初始化,无法取到方向)
IInitializePotentialDragHandler
17、//选择时连续调用,只针对Selectable起作用
IUpdateSelectedHandler
以下是示例:
对于Image来说是没办法通过前两种方式对事件进行监听的,那么这时候就只有通过接口来实现
先创建一个Image,再添加一个脚本组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class UIEventManager : MonoBehaviour, IPointerDownHandler
{
//实现的接口 鼠标点击Image会触发
//要确保Image组件里的Raycast Target被勾选
//因为这种方法是通过射线检测来实现的
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("IPointerDownHandler");
}
}
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/*
* UI必须有继承自Selectable组件的组件
*/
public class ImageII : MonoBehaviour,ISelectHandler,IDeselectHandler,IUpdateSelectedHandler
{
public void OnSelect(BaseEventData eventData)
{
print("UI被选中了");
}
public void OnDeselect(BaseEventData eventData)
{
print("UI被结束选中");
}
public void OnUpdateSelected(BaseEventData eventData)
{
print("选中之后被结束选中之前一直被调用");
}
}