SendMessage

Unity中有一个SendMessage函数

原型为:

void  SendMessage(string  methodName, object  value = null,  SendMessageOptions  options = SendMessageOptions.RequireReceiver);
GameObject go;
GameObject lg;
go.SendMessage("TOGO",lg,SendMessageOptions.DontRequireReceiver)

上面的代码,将在go游戏物体的所有游戏脚本中寻找名为TOGO的方法并调用它。注意即使TOGO是private方法也照样调用

如果找不到,则根据是SendMessageOptions是DontRequireReceiver还是RequireReceiver来决定,如果是前者,则不会报错。如果是后者,则会报错。默认是后者。

如果找到多个,则多个都会被调用

既然要调用一个方法,那么如果这个方法有一个参数,我们得给这个方法传递一个参数,那么上述代码中的lg,就是我们传递给TOGO方法的参数。

如果这个方法有多个参数,则会调用失败,因为使用SendMessage最多只能给该方法传递一个参数

如果go在场景中被隐藏掉(指实际上的active状态),那么使用SendMessage会出错,提示has no receiver


至于SendMessageUpwards,是在go和它的所有祖先中,查找非隐藏状态(指实际的active状态)的物体,在非隐藏状态的物体上查找方法并调用。

至于BroadcastMessage,则是在go和它的所有子孙物体中,查找非隐藏状态(指实际的active状态)的物体,在非隐藏状态的物体上查找方法并调用。

你可能感兴趣的:(SendMessage)