通用代码库
基于Unity 5.6.0f
使用SendMessage不仅效率低下,还容易因为string出错。
所以当需要传递多消息时,最好使用unity里的event系统。
例子如下:
事件发送部分
EventDispatcher.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventDispatcher : MonoBehaviour
{
/// <summary>
/// Event——ImgActive
/// </summary>
//关键字delegate,声明委托方法<方法名>([参数])
public delegate void SetImgActive(bool a);
//声明事件SetImgActive方法setActiveTrue
public event SetImgActive setActiveTrue;
public void Begin()//调用begin方法触发事件
{
if (setActiveTrue != null)
{
setActiveTrue(true);//方法传递参数 true
}
}
public event SetImgActive setActiveFalse;
public void End()
{
if (setActiveFalse != null)
{
setActiveFalse(false);
}
}
}
事件监听部分
EventListening.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventListening : MonoBehaviour
{
public EventDispatcher evt;
public GameObject img;
private void OnEnable()
{
evt.setActiveTrue += DosetActiveTrue;//+=重载创建
evt.setActiveFalse += DosetActiveFalse;
}
private void OnDisable()
{
evt.setActiveTrue -= DosetActiveTrue;//-=
evt.setActiveFalse -= DosetActiveFalse;
}
public void DosetActiveTrue(bool a)
{
img.SetActive(a);//do something
}
public void DosetActiveFalse(bool b)
{
img.SetActive(b);
}
}