ASP.NET Core MVC集成Unity WebGL遇加载错误,求解决方案
解决ASP.NET Core MVC集成Unity WebGL构建游戏的报错问题
核心问题与修正步骤:
错误引入HTML文件作为脚本
你在GamePage.cshtml里用<script src="~/index.html"></script>是完全错误的——index.html是HTML页面,不能通过script标签引入。正确做法是将Unity生成的index.html内的游戏初始化脚本代码复制到GamePage.cshtml中,而非直接引入整个HTML文件。确保静态文件目录正确
ASP.NET Core默认从wwwroot目录提供静态资源,你需要把Unity生成的Build文件夹及相关文件全部移动到项目的wwwroot目录下,这样~/Build/xxx的路径才能被正确解析。修正路由冲突
你的GamePage.cshtml带有@page指令(属于Razor页面),但GameController里又有Game方法返回视图,两者会产生路由冲突。如果使用控制器视图模式,需移除GamePage.cshtml的@page指令,并将视图文件放在Views/Game目录下(对应GameController的Game方法)。启用静态文件中间件
确保Program.cs中已启用静态文件支持,添加代码:app.UseStaticFiles();
修改后的GamePage.cshtml示例(作为控制器视图):
@{ ViewBag.Title = "Game"; } <h2>@ViewBag.Title</h2> <div id="gameContainer"></div> <link rel="stylesheet" href="~/Build/TemplateData/style.css" /> <script src="~/Build/TemplateData/UnityProgress.js"></script> <script> // 复制Unity index.html中的初始化逻辑,以下为示例框架 const container = document.getElementById("gameContainer"); const buildUrl = "/Build"; const config = { dataUrl: buildUrl + "/BUILDS.data", frameworkUrl: buildUrl + "/BUILDS.framework.js", codeUrl: buildUrl + "/BUILDS.wasm", streamingAssetsUrl: "StreamingAssets", companyName: "YourCompany", productName: "YourGame", productVersion: "1.0", }; // 加载Unity Loader并初始化游戏 const script = document.createElement("script"); script.src = buildUrl + "/BUILDS.loader.js"; script.onload = () => { createUnityInstance(container, config, (progress) => { // 可在此更新加载进度UI }).then((unityInstance) => { // 游戏加载完成后的回调 }).catch((error) => { alert(error); }); }; document.body.appendChild(script); </script>
完成以上修改后,重新运行项目即可正常加载Unity WebGL游戏。
内容的提问来源于stack exchange,提问作者Infinitum
相关产品推荐
相关产品推荐

