SendMessage是一种可以实现调用自身组件函数的方法,它实现的是一种伪监听者模式,利用的是反射机制。
- 发送给自身的所有脚本 (只发给自身所有脚本)
SendMessage("方法名称"); - 发送给自身的所有脚本以及自身父物体,父物体的父物体等身上所有脚本 (发给自己和父物体,及父物体的父物体 往上调用)
SendMessageUpwards("方法名称"); - 还有发给自己和子物体,及子物体的子物体,往下调用。
BroadcastMessage("方法名称");
扩展
- 需要方法传值的情况(实验发现只能传单值)
void Start()
{
SendMessage("GetMessage","kjdkaojdkaidawdaw");
}
private void GetMessage(string tmp)
{
Debug.Log("SendMessageTest,自身脚本,private" + tmp);
}
- 传多值的情况(使用object[] 存储方法值)
private string a = "2222dwadad";
private int b = 32323;
private double c = 2.3445;
private object[] _obj;
void Start()
{
_obj = new object[] {a, b, c};
SendMessage("GetMessage",_obj);
}
private void GetMessage(object[] objects)
{
Debug.Log("SendMessageTest,自身脚本,private"+objects[0] + objects[1] + objects[2]);
}
- 通过使用零参数,该接收方法可选择忽略此参数。 如果选项设置为SendMessageOptions.RequireReceiver,则在任何组件均未拾取此消息时输出错误。
SendMessage("GetMessage",SendMessageOptions.RequireReceiver);
- 不会将消息发送到非活动对象(即,在 Editor 中或使用 SetActive 函数已停用的对象)。