UnityEvent的使用方法

举报
LittleU 发表于 2022/02/17 15:05:46 2022/02/17
【摘要】 UnityEvent本质上是继承自UnityEventBase的类,它的AddListener()方法能够注册UnityAction,RemoveListener能够取消注册UnityAction,还有Invoke()方法能够一次性调用所有注册了的UnityAction。UnityEvent也有数个泛型版本(参数最多也是4个),但要注意的一点是,UnityAction的所有带参数的泛型版本都...

UnityEvent本质上是继承自UnityEventBase的类,它的AddListener()方法能够注册UnityAction,RemoveListener能够取消注册UnityAction,还有Invoke()方法能够一次性调用所有注册了的UnityAction。UnityEvent也有数个泛型版本(参数最多也是4个),但要注意的一点是,UnityAction的所有带参数的泛型版本都是抽象类(abstract),所以如果要使用的话,需要自己声明一个类继承之,然后再实例化该类才可以使用

unityevent是可以带参数的 首先是无参法使用

using UnityEngine;
using UnityEngine.Events;
public class Unityevent1 : MonoBehaviour
{
    UnityEvent Myevent;
    // Start is called before the first frame update
    void Start()
    {
        if (Myevent == null)
            Myevent = new UnityEvent();
        Myevent.AddListener(Ping);
    }

    private void Update()
    {
        if (Input.anyKeyDown && Myevent != null)
        {
            Myevent.Invoke();
        }
    }

    void Ping()
    {
        Debug.Log("Ping");
    }
}

其次是带有参数的使用方法

using System;
using UnityEngine;
using UnityEngine.Events;

[Serializable]
public class MyIntEvent : UnityEvent<int>//最多可以传4个值
{ 

}

public class unityevent2 : MonoBehaviour
{ 
    public MyIntEvent m_MyEvent;
    // Start is called before the first frame update
    void Start()
    {
        if (m_MyEvent == null)
            m_MyEvent = new MyIntEvent();

        m_MyEvent.AddListener(Ping);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.anyKeyDown && m_MyEvent != null)
        {
            m_MyEvent.Invoke(5); //调用传参,并传入参数,最多4个参数 
        }
    }

    void Ping(int i)
    {
        Debug.Log("Ping" + i);
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。