Unity 添加Click事件的几种方法总结

  • Post author:
  • Post category:其他



所有的点击事件的生效其实都是实现了接口: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!!!!



版权声明:本文为weixin_43381316原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。