unity中脚本之间传递信息的方式

//unity菜鸡,将自己学习中的知识写下来。如若发现错误,希望可以私信。共同进步

在unity中,脚本之间传递信息有几种方式

第一种也是比较正统的吧,SendMessage函数,他有如下这几种形式:

    1.SendMessage

    原型:public void SendMessage(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);

            methodName指的是需要接收本指令的函数,value即为所需传递到接收函数中的参数,options为如果未在目标函数中找到本方法的话是否需要引发Error操作

    2.SendMessageUpwards

        原型:public void SendMessageUpwards(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);

            他的作用和SendMessage是差不多的,不过他会向目标函数及所有父函数传递信息;

        3.BroadcastMessage

            原型:public void BroadcastMessage(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);

                作用与Upwards有点相反,他可以向所有子对象传递信息

第二种则是我平时用的比较多的,因为也是刚开始学,所以不一定正确,但目前还是有用的,可以予以借鉴:

            我们可以直接在当前函数中声明一个需要被调用的函数的对象:例如我们现有一个名叫Inventory的脚本中有这样一个函数存在:

public void Calculate(int in)
{
    if(in == 0){
       debug.log("输入为0");
    }
}

在其余函数中,我们可以这样来调用此函数,并传递信息:

public Inventory Inv;

/*
    在使用public后在unity操作页面绑定被操作脚本,或者使用Private 在awake或者 start中挂载被操作脚本
*/

public void Test()
{
    Inv.Calculate(0);  //传递参数,并调用
}
So~ that's all.
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在WinForm打开Unity游戏并进行数据交互,可以使用Unity提供的UnityPlayer.dll库文件,该文件包含了Unity游戏引擎的核心功能。以下是实现的步骤: 1. 在WinForm添加一个WebBrowser控件,该控件可以用来显示Unity游戏。 2. 将Unity游戏发布为WebGL格式,这样可以在WebBrowser控件运行Unity游戏。 3. 在WinForm编写C#代码来与Unity游戏进行数据交互。可以使用JavaScript与Unity游戏进行通信,也可以使用Unity提供的C# API与游戏进行交互。 下面是一个简单的示例代码,演示了如何在WinForm打开Unity游戏并进行数据交互: ```csharp using System; using System.Windows.Forms; namespace WinFormUnityDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); webBrowser1.ObjectForScripting = new UnityScripting(this); webBrowser1.Navigate("http://localhost/UnityGame.html"); } public void SendMessageToUnity(string message) { webBrowser1.Document.InvokeScript("SendMessageFromWinForm", new object[] { message }); } public void ReceiveMessageFromUnity(string message) { MessageBox.Show("Received message from Unity: " + message); } } [System.Runtime.InteropServices.ComVisible(true)] public class UnityScripting { private Form1 form; public UnityScripting(Form1 form) { this.form = form; } public void SendMessageToWinForm(string message) { form.ReceiveMessageFromUnity(message); } } } ``` 在上面的代码UnityScripting类是一个COM可见类,用于实现JavaScript与WinForm之间的通信。在WinForm的构造函数,将UnityScripting类的实例设置为WebBrowser控件的ObjectForScripting属性,这样JavaScript就可以调用UnityScripting类的方法。然后使用WebBrowser控件打开Unity游戏的HTML文件,并在Unity游戏调用JavaScript函数SendMessageFromWinForm来向WinForm发送消息。WinForm的SendMessageToUnity方法会被调用,然后通过WebBrowser控件调用JavaScript函数SendMessageToWinForm来向Unity发送消息。Unity的JavaScript脚本可以通过SendMessage方法来接收WinForm发送的消息,并将消息通过UnityScripting类的方法SendMessageToWinForm发送给WinForm。WinForm的ReceiveMessageFromUnity方法会被调用,并显示收到的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值