You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity WebGL:从JavaScript调用脚本函数时缺失MyGameInstance的问题

解决Unity WebGL中JavaScript调用C#函数时MyGameInstance不存在的问题

1. 确认Unity实例的正确变量名

Unity官方文档里的MyGameInstance只是示例变量名,实际要看你WebGL构建生成的HTML代码里的实例命名。打开你的修改版HTML文件,找到Unity实例初始化的代码块:

createUnityInstance(canvas, config, (progress) => {
  progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
  loadingBar.style.display = "none";
  // 将实例挂载到window全局对象,方便JS全局调用
  window.unityGameInstance = unityInstance;
});

这里的unityInstance就是真实的Unity游戏实例,把它赋值给window.unityGameInstance后,就能在JS里直接访问。

2. 确保C#脚本方法符合调用要求

你的onoff脚本要保证ctrl方法是public权限,参数类型与JS调用时的传参匹配:

using UnityEngine;

public class onoff : MonoBehaviour
{
    // 可在Inspector面板赋值需要控制的目标GameObject
    public GameObject targetObject;

    public void ctrl(string status)
    {
        int val = int.Parse(status);
        targetObject.SetActive(val != 0);
    }
}

注意:挂载脚本的GameObject名称(Main Camera)、方法名ctrl都要和场景里的完全一致,Unity对名称大小写敏感。

3. 正确调用SendMessage方法

在JavaScript中,需等待Unity实例加载完成后,用全局挂载的实例调用:

// 先判断实例是否已初始化完成
if (window.unityGameInstance) {
    window.unityGameInstance.SendMessage('Main Camera', 'ctrl', '0');
}

常见排查点

  • 必须等待Unity实例加载完成再调用:不要在页面刚加载时直接执行调用代码,要等createUnityInstance的then回调执行完毕。
  • 检查方法访问权限:C#方法必须是public,否则JS无法调用到。
  • 核对名称一致性:GameObject名称、方法名的大小写要严格匹配场景和代码中的定义。

内容的提问来源于stack exchange,提问作者Sean Mabli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:05:29