Unity3D利用单例模式添加委托,实现物体的点击事件

主要实现脚本ClickListener

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class ClickListener : MonoBehaviour, IPointerClickHandler
{
    public delegate GameObject AddListener(GameObject go);//声明一个构造参数为GameObject,返回值为GameObject的委托类型
    public AddListener OnClick;
    public static ClickListener Get(GameObject go)//在构造函数中检测物体是否挂载这个脚本组件,以及是否有BOX
    {
        ClickListener lisner;
        if (go.GetComponent<ClickListener>() == null)
            lisner = go.AddComponent<ClickListener>();
        lisner = go.GetComponent<ClickListener>();
        if (go.GetComponent<BoxCollider>() == null)
        {
            go.AddComponent<BoxCollider>();
        }
        return lisner;
    }
    void IPointerClickHandler.OnPointerClick(PointerEventData eventData)//继承自UnityEventSystem的点击方法,当点击调用时,执行对应GameObject的委托
    {
        if (OnClick != null)
        {
            Debug.Log(gameObject.name);
            OnClick(gameObject);
        }
    }
}

实际使用方法

ClickListener.Get(gameObject).OnClick = Test;
    void Test(GameObject obj)
    {
        Debug.Log("gameStart");
        
    }

这样就可以比较简单的实现UI,3D物体,PC,手机等多平台的点击事件的调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值