UGUI按钮事件添加与使用
UGUI是Unity自带的ui组件编辑器,下面就写一下UGUI里面的button组件的事件添加与使用,其它组件的迟点慢慢添加
首先,我们先要创建一个button,这个在Hierachy视图下,直接右键就可以创建了,如图:
这样我们就可以看到Game视图里面,有一个很棒的按钮了,那么我们如何使用这个按钮呢?如何给它添加事件,以及如何触发事件呢?
第一种方式,直接写一个公开的事件,在button组件下onclick窗口下把事件“挂”上去:
1.先写一个c#文件:TestButtonClick.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestButtonClick : MonoBehaviour {
public void clickBtn()
{
Debug.Log("点击了按钮");
}
}
2.把这个脚本挂到一个一个游戏对象上面,这里我直接把它挂在button上面,如图
3.在button的inspector的OnClick窗口,点击+号,意思就是要给它添加一个事件了,然后把button拉到inspector的Onclick窗口里面,然后选择我们刚刚写好的事件,如图
总结,这种方式的优点:方便,直接写,直接拉,适用于只有点击事件的按钮,缺点:不好管理,而且只有click事件,想做其它效果没发做
第二种方式,直接在代码里面绑定
1.写一个脚本,直接绑定在button上面,如图:
TestButtonClick.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TestButtonClick : MonoBehaviour {
// Use this for initialization
void Start () {
Button btn = this.GetComponent<Button>();
btn.onClick.AddListener(onClickBtn);
}
// Update is called once per frame
void Update () {
}
private void onClickBtn()
{
Debug.Log("第二种方式点击了按钮");
}
}
总结,优点,跟第一种差不多,但是比第一种好管理,缺点,跟第一种一样
第三种方式:通过EventTrigger实现按钮点击
1.写一个脚本,直接绑定在button上面,如图:
TestButtonClick.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
[RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))]
public class TestButtonClick : MonoBehaviour
{
// Use this for initialization
void Start()
{
Button btn = this.GetComponent<Button>();
EventTrigger trigger = btn.gameObject.GetComponent<EventTrigger>();
EventTrigger.Entry entry = new EventTrigger.Entry();
//鼠标点击
entry.eventID = EventTriggerType.PointerClick;
//鼠标进入
//entry.eventID = EventTriggerType.PointerEnter;
//鼠标移出
//entry.eventID = EventTriggerType.PointerExit;
entry.callback = new EventTrigger.TriggerEvent();
entry.callback.AddListener(onClick);
trigger.triggers.Add(entry);
}
private void onClick(BaseEventData pointData)
{
Debug.Log("第三种方式点击按钮");
}
private void onMouseMove(BaseEventData pointData)
{
Debug.Log("鼠标经过");
}
}
总结,优点,几乎button涵盖到的事件,都可以实现,缺点:无