所有的点击事件的生效其实都是实现了接口:IPointerClickHandler 里的 OnPointClick
先看看源码:
接口:
Button:
所以其实要实现点击事件,就是要实现接口。
总结了以下方法实现点击事件:
Button(指组件)添加点击事件:
1.Button组件仔细看看他的各个参数发现一个
On Click()/鼠标单击()
下面有3个选择的东西
1.运行生效时间(大概),三个选项 不生效,编译时和运行时,运行时。
2.对象,该对象可以选择场景内和资源里面的对象。(如果直接是脚本,我还没搞清楚,暂留疑问,后面再填,欢迎大佬补充)
3.No function 位置 就是选择需要执行的方法。
操作步骤:
1.写一个脚本,脚本里面写一个你需要点击后执行的方法。
public void ListClick()
{
Debug.Log("Button绑定function的点击事件!");
}
2.随便挂在一个物体上,我挂在场景里面的一个空物体(名为test)。
3.选择对象
先选中你脚本所挂的对象
选要执行的方法
然后点击就会执行ListClick()的方法。
如果有疑问,为什么可以这样实现操作呢?
我大概解释一下我的理解:
Button组件是官方的一个组件,而组件能够如此操作是用了
委托
的方式来实现。
如果不了解委托或者Unity委托事件,可以自行baidu学习。
Button添加listener实现点击事件
给需要点击事件的对象挂上下面的脚本,前提是物体要
有button组件
!!!!:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ListenerClick : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
GetComponent<Button>().onClick.AddListener(ButtonClick);
}
// Update is called once per frame
void Update()
{
}
void ButtonClick()
{
Debug.Log("Listener 的方法!");
}
}
此处其实跟上面的方法是一样的,也是用了委托。AddListener(function)说的直白一点,就是用了函数指针。用我的话翻译一下:
obj.GetComponent().onClick.AddListener(ButtonClick);
大概意思就是:给obj的button组件的onClick里面添加一个方法,点击生效。
但如果不是Button,又不想添加Button组件呢?
实现接口IPointerClickHandler-OnPointClick(不一定是click,也肯能是up,down啥的)
此处我用Image实现的点击事件。
添加了个脚本实现了OnPointClick接口:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class InterFaceClick : MonoBehaviour,IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("接口实现的点击事件");
//throw new System.NotImplementedException();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
(实际上发现实现接口,不用命名空间UnityEngine.UI,只用using UnityEngine.EventSystems就行了)
然后保存就完成啦。
切记切记切记!!!!!
UGUI 的点击等事件,其实都是由射线完成的,所以如果你的对象要想有点击响应,那么一定要勾选 光影投射目标/RaycastTarget!!!!