Unity中EventHandler与EventArgs的使用

来源:互联网 发布:nosql数据库那个最火 编辑:程序博客网 时间:2024/06/11 06:22

首先EventArgs是一个类,如:

public class EventArgs{    }


而EventHandler是一个申明好的委托,如:

Action m_Action
这样的委托,只是他给定义好的一个,内部是这样的:

public delegate void EventHandler(object sender, TEventArgs e)

下面是使用,一个是没有参数,一个是有参数,参数的意思就是EventArgs中是否有数据

using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class PlayerControl : MonoBehaviour{    /// <summary>    /// 移动结束后触发    /// </summary>    public event EventHandler MoveComplete;    public event EventHandler<PlayerMoveEventArgs> MoveCompleteHandle;void Start ()     {}void Update ()    {        if (Input.GetMouseButtonDown(0))        {            //PlayerMoveComplete();            PlayerMoveCompleteHandle();        }}    private void PlayerMoveComplete()    {        if(MoveComplete != null)            MoveComplete(this,EventArgs.Empty);    }    private void PlayerMoveCompleteHandle()    {        if (MoveCompleteHandle != null)        {            PlayerMoveEventArgs player = new PlayerMoveEventArgs("HHHHHHHH");            MoveCompleteHandle(this, player);        }    }}

管理类:

using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class GameManager : MonoBehaviour{    public static GameManager Instance;    public PlayerControl Player;    void Awake()    {        Instance = this;    }void Start (){    //Player.MoveComplete += HandleMoveComplete;    Player.MoveCompleteHandle += PlayerMoveCompleteHandle;}    void HandleMoveComplete(object sender, EventArgs e)    {        Debug.Log("1111111");    }    void PlayerMoveCompleteHandle(object sender, PlayerMoveEventArgs e)    {        PlayerMoveEventArgs player = e as PlayerMoveEventArgs;        Debug.Log(e.Messgae);    }}public class PlayerMoveEventArgs : EventArgs{    private string m_Message;    public string Messgae { get { return m_Message; } }    public PlayerMoveEventArgs(string m)    {        m_Message = m;    }}