unity中的SendMessage详解

news/2024/10/20 1:21:17/

介绍

SendMessage是Unity中用于在游戏对象之间发送消息的函数。通过SendMessage函数,可以在游戏对象之间调用方法,从而实现脚本之间的通信。SendMessage方法可以用于调用任何公共方法,不仅限于MonoBehaviour脚本中的方法。

方法

SendMessage函数有两个参数:

void SendMessage(string methodName, object value = null);
  • methodName:要调用的方法的名称,必须为字符串类型。
  • value:要传递给方法的参数,可以为任何类型的值。默认值为null,表示不传递参数。

如果要调用的方法需要传递多个参数,可以使用SendMessageOptions枚举类型中的SendMessageOptions.RequireReceiver选项,将参数打包成一个object数组进行传递。

void SendMessage(string methodName, object[] parameters, SendMessageOptions options);
  • methodName:要调用的方法的名称,必须为字符串类型。
  • parameters:要传递给方法的参数,为object类型数组。
  • options:SendMessageOptions枚举类型中的选项。

举例子

例子1:调用目标对象的方法

在下面的例子中,我们将演示如何使用SendMessage函数调用目标对象的方法。

public class TargetScript : MonoBehaviour
{public void SayHello(string name){Debug.Log("Hello, " + name + "!");}
}public class SenderScript : MonoBehaviour
{public GameObject target;private void Start(){target.SendMessage("SayHello", "John");}
}

在这个例子中,我们有两个脚本:TargetScript和SenderScript。TargetScript脚本是一个MonoBehaviour脚本,其中包含一个公共的SayHello方法。SenderScript脚本有一个公共的GameObject变量target,表示要发送消息的目标对象。在Start方法中,我们使用SendMessage函数调用target对象的SayHello方法,并传递一个字符串参数"John"。

例子2:调用所有对象的方法

在下面的例子中,我们将演示如何使用SendMessage函数调用所有对象的方法。

public class TargetScript : MonoBehaviour
{public void SayHello(){Debug.Log("Hello!");}
}public class SenderScript : MonoBehaviour
{private void Start(){SendMessage("SayHello");}
}

在这个例子中,我们有两个脚本:TargetScript和SenderScript。TargetScript脚本是一个MonoBehaviour脚本,其中包含一个公共的SayHello方法。SenderScript脚本在Start方法中使用SendMessage函数调用所有对象的SayHello方法。

例子3:传递多个参数

在下面的例子中,我们将演示如何使用SendMessage函数传递多个参数。

public class TargetScript : MonoBehaviour
{public void SayHello(string name, int age){Debug.Log("Hello, " + name + "! You are " + age + " years old.");}
}public class SenderScript : MonoBehaviour
{public GameObject target;private void Start(){object[] parameters = new object[2];parameters[0] = "John";parameters[1] = 25;target.SendMessage("SayHello", parameters, SendMessageOptions.RequireReceiver);}
}

在这个例子中,我们有两个脚本:TargetScript和SenderScript。TargetScript脚本是一个MonoBehaviour脚本,其中包含一个公共的SayHello方法,需要传递两个参数:一个字符串类型的name和一个整数类型的age。SenderScript脚本有一个公共的GameObject变量target,表示要发送消息的目标对象。在Start方法中,我们先创建一个object类型数组parameters,将要传递的参数打包进去,然后使用SendMessage函数调用target对象的SayHello方法,并将parameters数组和SendMessageOptions.RequireReceiver选项一并传递给SendMessage函数。这样就可以成功地传递多个参数了。


http://www.ppmy.cn/news/96638.html

相关文章

设计模式之备忘录模式

备忘录模式的定义是:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 该模式允许生成对象状态的快照和将其还原,主要用于撤销与重做功能的实现。 该模…

目标检测YOLO实战应用案例100讲-基于深度学习的无人机航拍图像目标检测算法研究与应用

基于深度学习的无人机航拍图像目标检测算法研究与应用 无人机是无线遥控装置和内置的程序控制装置操纵,亦或由车载计算机完全地 或间歇地规律操控的不载人飞机。无人机的地面航拍成像在军事探察、地质勘探、 公安侦查等领域[1-2]得到广泛应用。在军事领域,能够通过无人机进行…

启动U盘制作工具Rufus 4.0.2035

Rufus是是一款小巧实用免费开源的帮助格式化和创建可启动USB闪存驱动器的工具,如USB钥匙/软盘、记忆棒等,可快速制作linux系统或者win启动u盘,可快速的将ISO镜像文件制作成可引导启动的USB启动盘,支持ISO镜像、GPT和UEFI&#xff…

第五十五天学习记录:C语言进阶:动态内存管理Ⅲ

柔性数组 C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员。 柔性数组的特点: 。结构体中的柔性数组成员前面必须至少有一个其他成员。 。sizeof返回的这种结构大小不包括柔性数组的内存。 。包含柔性数组成员的结构…

海量数据中找出前k大数(topk问题),一篇文章教会你

💯 博客内容:【数据结构】向上调整建堆和向下调整建堆的天壤之别以及堆排序算法 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信&…

HNU-电路与电子学-综合设计-模型机

写在前面: 每一年的综合设计肯定都有改动,故肯定不能照搬照抄,大家可以借鉴思路,复现成果,但要注意不同之处,以免被0分处理。 模型设计的指导书我不放在这里了,因为那是课程组老师们的成果。 …

Ping过程 原理 详解

Ping过程 原理 详解 ***\*3:\**表示RARP请求** ***\*4:\**表示RARP应答** 再继续… 如果主机A要ping主机C,那么主机A发现主机C的IP和自己不是同一网段,他就去找 ***\*网关\**** 转发,但是他也不知道网关的MAC情况下呢?他就会向之前那个步骤一样 **先发送一个 ARP广播…

SAP-MM费用类采购通过物料组确定科目

一、WRX的配置,分两类GR/IR科目: 1、做库存管理物料的GR/IR科目,需要配置评估类,此评估类就是物料主数据里配置的评估类; 2、非库存管理费用化物料的GR/IR科目,如固定资产、办公用品、低值易耗品等等&#…