我制作了一款叫做 One in a Thousand 的游戏,寻找幸运草四叶草。这款游戏的人感到这会是很 nice 的壁纸引擎壁纸。所以我开启了一个做一个壁纸。然而,我在网上发现有关如何创建这个壁纸几乎没有任何文档,不知道为什么,unity 对于创建交互壁纸看起来像是很好的选择。最后我意识到有两个方法来实现:
- 应用壁纸:该方法会创建一个可执行文件然后将其直接输出到壁纸。
- 网页壁纸:该方法会在一个embed中使用网页展示。
但是应用壁纸的方法似乎已经不流行,因为它可能会危险,所以网页壁纸是更好的选择问题是:是否支持 WebGL?我在网上找不到一个明确的答案,我必须去问自己。我已经制作了一个功能性的 WebGL 游戏了,所以我将其放到壁纸设计器中来看看会发生什么。然后它就能够工作。下面我会解释如何让Unity的 WebGL 将其与壁纸引擎兼容的一般版。
输入
只有左键鼠标才可以被处理,其他鼠标按键或键盘按键都不能工作。drag_and_drop 技术上来说是可以的,但这也会触发一个rubber band的选择,导致用户体验降低。
音频
壁纸引擎所用 Chromium Embedded Framework (CEF) 限制壁纸引擎只支持一种音频格式,不支持 AAC。unity 的 WebGL 可以自动将音频文件转换为 AAC,否则壁纸将没有音频。
解决方法是使用流计算资源 (Streaming Assets)。简而言之,将音频文件存放在与游戏同一个文件夹下,不将其捆绑在游戏中。这可以让我们在unity中使用其他音频格式而不损失音频,但是这造成了一些额外的复杂性(您需要使用 UnityWebRequestMultimedia.GetAudioClip 来加载那些资源)。从我的测试结果来看,wav 和 mp3 文件都可以正常工作。
壁纸引擎属性
壁纸引擎允许用户直接从壁纸页面中修改设置(称为 *properties):
https://preview.redd.it/sptrwtbrl9tg1.png?width=1827&format=png&auto=webp&s=1d347a12ca0e0add03932f17252c6957ffcf7e94
为了在WebGL 游戏中读取这些属性,需要三点:
- 一个WebGL 插件来读取壁纸引擎属性。
- 在web 页面index.html 文件中,javascript 逻辑来保存属性用于插件读取,并通过 Sendmessage 通知游戏发生属性更改(参见 wallpaper 引擎文档)。
- 在游戏中,脚本来读取属性并处理来自web 页面的属性更改。
fps 限制
壁纸引擎要求壁纸支持自定义 fps限制。必须先读取 fps 属性(使用相同的方式设置属性)然后应用在 unity 中:
QualitySettings.vSyncCount = 0;
Application.targetFrameRate = fps;
经过了所有这些调整之后,我又再次能顺利把壁纸做出来了!我知道这些解释是比较简介的,而我这里也没有深入细节。这意味着我在思考的是如何优化我的现有代码并创建一个宝藏来帮助其他开发人员使用 Unity 去创建壁纸引擎壁纸。有人感兴趣吗?
最后,如果你想测试:
- 请点击 🔗 下载幸运草壁纸 - One in a Thousand
- ⭐ Wishlist 全局的 - **One in a Thousand
评论 (0)