从浏览器向 Unity3D 发送消息

Send message from Browser to Unity3D

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

我的游戏对象 "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");
}

但是当我调用它时什么也没有发生。我做错了什么?

我建议将此选项放入您自己的游戏中,但如果您真的需要使外部 script/app(例如某处托管的某些网站)与 Unity 对话,则应通过 API.

使用您喜欢的后端(PHP、ASP.NET WebAPI、Node.JS)创建一个 API,公开一个方法 ReceiveMessageFromExternalSource()因此您可以使用 post 请求(使用适当的安全性)从您的 javascript 调用,将其存储在某个地方(数据库或任何其他持久性引擎),然后使用您的 Unit3D 应用程序调用相同的 API 使用 WWWForm(),得到所述值。为了避免一直从 Unity 调用服务器以查找更新的值,并使事情在 "real time" 中正常工作,我建议您研究 WebSocket 之类的东西,让您的服务器向 Unity 发送信号,或者甚至实现一个小的使用 Unity 的服务器。

决定post评论回答作为以后遇到此问题的人的回答。

页面必须在从 Unity 调用任何函数之前完成加载,否则将无法运行。当 Unity 尚未完成加载时,您要向其发送消息的 Objects 存在。因此将抛出错误,或者如果 Exception 被禁用,它将无提示地失败。所以在Unity中调用Unity函数之前必须等待一段时间。