【发布时间】:2017-05-11 15:02:57
【问题描述】:
我希望将 Unity WebGL 项目集成到 Angular2 应用程序中。将所有这些脚本移动到 Angular2 组件中的正确方法是什么?
首先,Unity WebGL 会像这样导出 index.html:
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unity WebGL Player | Espoo web manager (Prefab preview)</title>
<link rel="shortcut icon" href="TemplateData/favicon.ico">
<link rel="stylesheet" href="TemplateData/style.css">
<script src="TemplateData/UnityProgress.js"></script>
<script src="Build/UnityLoader.js"></script>
<script>
var gameInstance = UnityLoader.instantiate("gameContainer", "Build/builds.json", {onProgress: UnityProgress});
</script>
</head>
<body>
<div class="webgl-content">
<div id="gameContainer" style="width: 960px; height: 600px"></div>
<div class="footer">
<div class="webgl-logo"></div>
<div class="fullscreen" onclick="gameInstance.SetFullscreen(1)"></div>
<div class="title">Espoo web manager (Prefab preview)</div>
</div>
</div>
</body>
</html>
我开始拆分它,首先我将样式表移动到模板 .css 文件中:
@import './webgl-app/TemplateData/style.css';
然后我将 javascript 移到组件 .ts 文件中:
import { Component, AfterViewInit } from '@angular/core';
import './webgl-app/TemplateData/UnityProgress.js';
import './webgl-app/Build/UnityLoader.js';
declare var UnityLoader: any;
declare var UnityProgress: any;
@Component({
selector: 'app-unity-prefab-preview',
templateUrl: './unity-prefab-preview.component.html',
styleUrls: ['./unity-prefab-preview.component.css']
})
export class UnityPrefabPreviewComponent implements AfterViewInit {
constructor() {}
gameInstance: any;
ngAfterViewInit() {
this.gameInstance = UnityLoader.instantiate("gameContainer", "./webgl-app/Build/builds.json", { onProgress: UnityProgress });
}
}
然后对于 .html 模板,我留下了这个:
<div class="webgl-content">
<div id="gameContainer" style="width: 960px; height: 600px"></div>
</div>
但是,无论我尝试什么方法(比如在 JS 文件上使用“require”),ngAfterViewInit 中的行总是给出错误:“参考错误:未定义 UnityLoader”。
这应该如何正确完成才能发挥作用?
【问题讨论】:
-
'./webgl-app/Build/UnityLoader.js' 被导入了,但不应该声明为变量吗?如
import { UnityLoader } from './webgl-app/Build/UnityLoader.js'; -
感谢您的建议!我对此进行了测试,但我得到了 UnityLoader/UnityProgress 不是模块的错误。
-
TemplateData/UnityProgress.js 是否有任何
export声明的函数? afaik 只能导入export-ed 函数/变量。 -
我设法通过将导出添加到相应的 .json 文件中来完成导入工作。在将一些 webgl-app 移动到公共资产文件夹后,我几乎可以运行它,但随后页面在模式对话框中显示:在此页面上运行 Unity 内容时发生错误。有关更多信息,请参阅您的浏览器 JavaScript 控制台。错误是:ReferenceError: UnityLoader is not defined 这个对话框似乎是由 Unity 而不是 Angular 启动的,所以我猜它几乎运行了,因为加载时间很长。但仍然没有运气,它需要在某处声明 UnityLoader。
-
@JuhanaPietariLehtiniemi 您应该将您的解决方案发布为答案,以便可以将此问题标记为完成。
标签: javascript angular typescript unity3d unity-webgl