c#如何给另一个脚本通过一个bool值发消息
时间: 2024-10-28 08:08:16 浏览: 11
在C#中,如果你想要在一个脚本向另一个脚本传递一个布尔值作为消息,你可以利用Unity的通信机制,特别是`Message`类和事件系统。这里是一个简单的例子:
首先,在发送消息的脚本(例如SenderScript.cs)里:
```csharp
using UnityEngine;
using System.Collections;
public class SenderScript : MonoBehaviour
{
public bool isMessage; // 存储你要发送的消息
private void SendBoolMessage()
{
GameObject targetObject = FindObjectOfType<ReceiverScript>(); // 找到接收者
if (targetObject != null)
{
MessageDelegate del = new MessageDelegate(OnReceivedMessage);
targetObject.SendMessage("ReceiveBool", isMessage, SendMessageOptions.DontRequireReceiver); // 发送消息
targetObject.AddUniqueEventReceiver(del, "ReceiveBool"); // 注册事件接收
}
}
private void OnReceivedMessage(object[] args) // 接收函数
{
bool receivedValue = (bool)args[0];
Debug.Log("Received message: " + receivedValue);
}
}
```
然后,在接收消息的脚本(例如ReceiverScript.cs)里:
```csharp
using UnityEngine;
using System.Collections;
public class ReceiverScript : MonoBehaviour
{
public delegate void MessageDelegate(params object[] args);
[System.MulticastMethod]
public event MessageDelegate ReceiveBool;
protected virtual void AddUniqueEventReceiver(MessageDelegate handler, string methodName)
{
// 如果尚未注册,则添加接收器
if (!receivers.Contains(handler))
{
receivers.Add(handler);
OnRegisterEvent(methodName);
}
}
// 当有其他脚本开始监听该事件时,会调用这个方法
protected virtual void OnRegisterEvent(string methodName)
{
// 你可以在这里做一些额外的设置
}
// Unity自动触发的函数,当收到消息时被调用
protected virtual void OnReceiveBool(params object[] args)
{
// 处理接收到的布尔值
if (ReceiveBool != null)
{
ReceiveBool(args);
}
}
}
```
在这个示例中,`SenderScript`通过`SendMessage`发送一个名为"ReceiveBool"的消息,并附带布尔值`isMessage`。`ReceiverScript`订阅了这个事件并在`OnReceiveBool`方法中处理它。
阅读全文