当前位置:   article > 正文

unity 中的 SendMessage_unity gameobject.sendmessage

unity gameobject.sendmessage

GameObject.SendMessage 发送消息

function SendMessage (methodName : string, value : object = null, options : SendMessageOptions = SendMessageOptions.RequireReceiver) : void

向同级发送消息。

这个游戏物体上的所有MonoBehaviour上调用名称为methodName的方法。

接收消息的方法可以通过不要参数的方法来选择忽略参数。当选项被设置为SendMessageOptions.RequireReceiver时,如果消息没有被任何一个组件处理,则会打印一个错误。

GameObject.SendMessageUpwards 向上发送消息

function SendMessageUpwards (methodName : string, value : object = null, options : SendMessageOptions = SendMessageOptions.RequireReceiver) : void

向物体和父物体发送消息

这个游戏物体及其祖先物体的所有MonoBehaviour中调用名称为methodName的方法。

会调用到最顶层的父亲物体,不仅是当前父物体,只要是层级比他高的都会调用)

接收消息的方法可以通过不要参数的方法来选择忽略参数.当选项被设置为SendMessageOptions.RequireReceiver时,如果消息没有被任何一个组件处理,则会打印一个错误。

Component.BroadcastMessage 广播消息

function BroadcastMessage (methodName : string, parameter : object = null, options : SendMessageOptions =SendMessageOptions.RequireReceiver) : void

在游戏物体每一个MonoBehaviour和它的全部子物体上调用名为methodName的方法。

通俗的解释:

BroadcastMessage朝物体和所有子物体发送消息。

也就

对一个物体及其所有子物体,进行消息的广播,如果其中任何子物体上贴有脚本,而脚本中有相应的处理此消息的函数,则Invoke调用之。

The receiving method can choose to ignore parameter by having zero arguments. if options is set to SendMessageOptions.RequireReceiver an error is printed when the message is not picked up by any component.

接受消息的此方法(函数)可以通过设置没有引用参数表来忽略传过来的消息中的参数。如果选项Option中设置成了SendMessageOptions.RequireReceiver,那么当没有任何脚本组件接受此消息时,一个相应的错误会弹出来


实际上这个函数的目的就是为了调用其他脚本中的函数,也就是交互目的他会在指定的gameobject上所依附的脚本中针对函数名"string"去检索. 找到后调用并传送参数object.(参数可以为空)

简单测试:

using UnityEngine;

using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
public static NewBehaviourScript ins;
public GameObject go;
// Use this for initialization
void Start () {
ins = this;
go.SendMessageUpwards ("A", 1);
}

// Update is called once per frame
void Update () {

}

}

using UnityEngine;
using System.Collections;


public class C : MonoBehaviour {

public int c;
// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}
public void A(int i){

c = i;
}
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/126794
推荐阅读
相关标签
  

闽ICP备14008679号