加载界面自定义
说明如何自定义 Unity WebGL 加载期间显示的画面。
加载画面文件
加载画面存在于两个地方。
WebGLTemplates/AITTemplate/loading.html
SDK默认模板(原始)
Assets/AppsInToss/loading.html
按项目定制的加载画面
AITPackageInitializer为 [InitializeOnLoad]在编辑器启动时执行, Assets/AppsInToss/loading.html如果没有此文件,则复制 SDK 模板。修改此文件即可应用自定义加载画面。
SDK模板搜索顺序:
Packages/im.toss.apps-in-toss-unity-sdk/WebGLTemplates/AITTemplate/loading.htmlPackages/com.appsintoss.miniapp/WebGLTemplates/AITTemplate/loading.html基于 Assembly 路径
构建时插入顺序
构建的 CopyWebGLToPublic() 阶段 index.html中的 %AIT_LOADING_SCREEN% 占位符会被替换为完整的加载画面内容。
1. 存在 Assets/AppsInToss/loading.html?
→ 是:使用项目自定义加载画面
→ 否:回退到 SDK 默认模板
2. 如果 SDK 模板也不存在?
→ Debug.LogWarning("找不到加载画面文件。将使用空白加载画面")
→ 替换为空字符串也就是说加载画面会 在构建时内联到 index.html 中。由于不会作为独立文件加载,因而相对路径引用会以最终 index.html 为基准进行解析。
恢复为默认模板
AIT > Reset Loading Screen执行后会弹出确认对话框,然后将 SDK 模板 Assets/AppsInToss/loading.html重新复制过来。自定义内容会消失,如有需要请先备份。
文件结构
应用信息
加载画面中显示的应用信息按以下顺序确定。
原生应用环境 (toss 应用内)— SDK 会
getAppsInTossGlobals通过它获取应用信息并覆盖。回退 (网页浏览器等)— 使用在 AIT Configuration 中设置的值。
应用名称(displayName)
显示在加载画面中的应用名称
应用图标(iconUrl)
显示在加载画面中的应用图标 URL
默认颜色(primaryColor)
进度条颜色
参考:在实际 toss 应用环境中,原生值优先,因此上述设置主要会在开发·测试环境中看到。
可自定义范围
loading.html可以自由修改其 HTML、CSS、JavaScript。 AITLoading 可以通过 API 接收进度值。接收到的值可以按所需方式自由呈现。
UI 设计 — 进度条、饼图、圆形加载等
动画 — CSS 动画、JavaScript 动画、GIF、Lottie
品牌元素 — 吉祥物角色、Logo 动画
交互元素 — 小游戏、提示滑块
使用外部资源
StreamingAssets (推荐)— Assets/StreamingAssets放在这里会自动包含到构建中。
数据 URI — 几 KB 以下的小图片会以内联 Base64 形式嵌入。
CDN — 通过外部 URL 加载。会产生网络依赖,且加载画面本身可能出现得更晚。
AITLoading API
window.AITLoading在 index.html中定义,以下六项就是全部公开接口。 _以
appInfo
{ iconUrl, displayName, primaryColor }
onReady(callback)
应用信息准备完成
onProgress(callback)
进度更新
onComplete(callback)
加载完成
onError(callback)
发生错误
hide()
隐藏加载画面
appInfo
初始值是构建时替换的 Configuration 值,当原生应用信息到达后会更新为其值。
onReady
在应用信息准备好后调用。用于 UI 初始化。
重要:
onReady回调 不要假定只会调用一次。 初始化时会调用一次,之后如果原生应用信息到达,更新后的appInfo值会再次调用。请编写幂等的回调,使其多次执行也安全。如果在已经完成初始化后才注册,则会立即调用一次。
onProgress
0.0到 1.0 之间的进度值。
onComplete
加载结束时调用。如果在已完成后才注册,则会立即调用。
onError
{ message } 形式的对象。
参考:WebGL 上下文创建失败(
GLctx,WebGL 上下文,无法创建系列)由 SDK 通过专用路径处理,因此不会进入此回调。除非你要直接处理设备无法打开 WebGL 的情况,否则可以不用在意。
hide
#ait-loading-wrapper 元素通过 display: none隐藏。
示例
下面是我手写的示例。SDK 实际提供的默认模板(深色主题)请在 Assets/AppsInToss/loading.html中查看。
进度条
百分比显示与错误处理
故障排查
图标未显示
请检查 AIT Configuration 中是否设置了图标 URL
可能会因 CORS 策略而阻止外部图片——建议使用同域图片
在原生应用环境中,应用图标会自动加载,因此可能看不到回退值
自定义加载画面未应用
文件是否在
Assets/AppsInToss/loading.html中——其他路径不会被识别加载画面会在构建时内联,因此只修改文件而不重新构建不会生效
进度未更新
AITLoading.onProgress()是否已注册回调应在页面加载早期注册——如果在加载已经开始后注册,将无法接收到之前的进度
appInfo 为空
AITLoading.appInfo不要直接读取, onReady 而应在回调中使用。因为在脚本执行时,应用信息初始化可能尚未完成。
相关文档
这有帮助吗?