Unity WebGL 中文文档

11. Using WebGL Templates

2018-05-01  本文已影响282人  tackor

使用WebGL模板

当您构建WebGL项目时,Unity会将播放器嵌入HTML页面,以便在浏览器中播放。默认页面是一个简单的白色页面,在灰色画布上带有一个加载栏。或者,您可以在“播放器设置”检查器(菜单:Edit > Project Settings > Player)中选择最小化模板(只有必要的样板代码才能运行WebGL内容)。

image

内置的HTML页面对于测试和演示最小播放器很好,但出于生产的目的,通常需要将播放器托管在最终部署的页面中。例如,如果Unity内容通过外部调用接口与页面中的其他元素交互,那么它必须使用提供这些交互元素的页面进行测试。 Unity允许您通过使用WebGL templates(WebGL模板)来提供自己的页面以承载播放器。

Structure of a WebGL Template WebGL模板的结构

自定义模板通过在Assets文件夹中创建一个名为“WebGLTemplates”的文件夹添加到项目中 - 模板本身就是该文件夹中的子文件夹。每个模板文件夹都包含一个index.html文件以及该页面所需的任何其他资源,例如图像或样式表。

image

一旦创建,模板将出现在“播放器设置”检查器的选项中。(模板的名称将与其文件夹相同)。或者,该文件夹可以包含名为thumbnail.png的文件,该文件的尺寸应为128x128像素。缩略图图像将显示在检查器中,以提示完成的页面的外观。

该html文件需要至少包含以下元素:

UnityLoader.instantiate(container, url, override)

UnityLoader.instantiate负责创建一个新的内容实例。

UnityLoader.instantiate("MyContainer", “build/MyBuild.json”, {
    onProgress: MyProgressFunction,
    Module: {
        TOTAL_MEMORY: 268435456,
        onRuntimeInitialized: MyInitializationCallbackFunction,
    },
});

Template Tags 模板标签

在构建过程中,Unity将在页面文本中查找特殊的标记字符串,并用编辑器提供的值替换它们。这些包括名称,屏幕尺寸和关于玩家的其他各种有用信息。

标签由页面源中的百分号(%)分隔。例如,如果产品名称在播放器设置中被定义为“MyPlayer”: -
<title>%UNITY_WEB_NAME%</title>

...在模板的索引文件中将被替换为
<title>MyPlayer</title>

...为构建生成的主机页面。完整的标签集合如下: -

image

标签名称旁边的文本框包含自定义标签在构建过程中将被替换的文本。

Example

为了说明模板标签的用法,下面是Unity用于其最小WebGL模板的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 | %UNITY_WEB_NAME%</title>
   <script src="%UNITY_WEBGL_LOADER_URL%"></script>
   <script>
   var gameInstance = UnityLoader.instantiate("gameContainer", "%UNITY_WEBGL_BUILD_URL%");
   </script>
 </head>
 
 <body>
   <div id="gameContainer" style="width: %UNITY_WIDTH%px; height: %UNITY_HEIGHT%px; margin: auto"></div>
 </body>
 
</html>

最小化和默认模板都可以在Windows的Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates或Mac上的/PlaybackEngines/WebGLSupport/BuildTools/WebGLTemplates下的Unity安装文件夹中找到。

Adding a progress bar 添加进度条

加载时,Unity WebGL内容会自动为您呈现默认进度条。您可以通过提供您自己的进度函数作为附加实例化参数来覆盖默认加载栏。例如:

var gameInstance = UnityLoader.instantiate("gameContainer", "%UNITY_WEBGL_BUILD_URL%", {onProgress: UnityProgress});

UnityProgress是两个参数的函数:gameInstance(标识进度条所属的游戏实例)和progress(进度)(0.0到1.0的值,提供有关当前加载进度的信息)。

例如,默认WebGL模板中的进度函数看起来如下:

var gameInstance = UnityLoader.instantiate("gameContainer", "%UNITY_WEBGL_BUILD_URL%", {onProgress: UnityProgress});

例如,默认WebGL模板中的进度函数看起来如下:

function UnityProgress(gameInstance, progress) {
  if (!gameInstance.Module)
    return;
  if (!gameInstance.logo) {
    gameInstance.logo = document.createElement("div");
    gameInstance.logo.className = "logo " + gameInstance.Module.splashScreenStyle;
    gameInstance.container.appendChild(gameInstance.logo);
  }
  if (!gameInstance.progress) {    
    gameInstance.progress = document.createElement("div");
    gameInstance.progress.className = "progress " + gameInstance.Module.splashScreenStyle;
    gameInstance.progress.empty = document.createElement("div");
    gameInstance.progress.empty.className = "empty";
    gameInstance.progress.appendChild(gameInstance.progress.empty);
    gameInstance.progress.full = document.createElement("div");
    gameInstance.progress.full.className = "full";
    gameInstance.progress.appendChild(gameInstance.progress.full);
    gameInstance.container.appendChild(gameInstance.progress);
  }
  gameInstance.progress.full.style.width = (100 * progress) + "%";
  gameInstance.progress.empty.style.width = (100 * (1 - progress)) + "%";
  if (progress == 1)
    gameInstance.logo.style.display = gameInstance.progress.style.display = "none";
}

您可以按原样或作为自己模板的参考使用它。由于进度条完全以JavaScript实现,因此您可以自定义或替换它以显示任何您想要的进度指示。

11

Unity WebGL 中文文档 Unity 2018.1.b
1. WebGL
2. webGL Browser Compatibility
3. Building and running a WebGL project
4. WebGL: Deploying compressed builds
5. Debugging and trouble shooting WebGL builds
6. WebGL Graphics
7. WebGL Networking
8. Using Audio In WebGL
9. WebGL performance considerations
10. WebGL: Interacting with browser scripting
11. Using WebGL Templates
12. Cursor locking and full-screen mode in WebGL
13. Input in WebGL

上一篇下一篇

猜你喜欢

热点阅读