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
相关产品推荐
相关产品推荐

