从浏览器发送消息到Unity3D

时间:2016-06-15 11:13:13

标签: javascript unity3d unity-webgl

我正在尝试向Unity3D WebGl应用发送消息。

我的GameObject“Player”的控制器基本上看起来像这样:

public class color : MonoBehaviour {

    void Start ()
    {
        gameObject.GetComponent<Renderer>().material.color = Color.red;
    }

    public void green(string s)
    {
        gameObject.GetComponent<Renderer>().material.color = Color.green;
    }
} 

和我这样的Javascript方法:

function SaySomethingToUnity() {
    SendMessage("Player", "green", "teeeext");
}

但是当我称之为没有任何反应时。我做错了什么?

2 个答案:

答案 0 :(得分:5)

决定将评论答案发布为将来会出现此问题的人的答案。

页面必须在从Unity调用任何函数之前完成加载,否则它将无法正常工作。当Unity尚未加载时,您要发送消息的Objects存在。由于此原因将引发错误,或者如果禁用Exception,它将无提示失败。因此,在从Unity调用Unity函数之前,您必须等待一段时间。

答案 1 :(得分:1)

我建议把这个选项放在你自己的游戏中,但是如果你真的需要制作一个外部脚本/应用程序(比如某个网站托管某个地方)与团结交谈,那么应该通过API完成。

使用您首选的后端(PHP,ASP.NET WebAPI,Node.JS)创建API,公开方法ReceiveMessageFromExternalSource(),以便您可以使用post请求(使用适当的安全性)从您的javascript调用,存储它某处(数据库或任何其他持久性引擎),然后使用您的Unit3D应用程序使用WWWForm()调用此相同的API,以获取所述值。为了避免一直从Unity调用服务器寻找更新的值,并使事情“实时”工作,我建议你学习像WebSocket这样的东西,让你的服务器向Unity发送信号,甚至实现一个小服务器与Unity。