wasm_module.zip (9.9 KB)
-
Creator 版本:3.4.1
-
目标平台: Edge 浏览器
-
重现方式:
-
新建HelloWorld项目;
-
拷贝hello3.js, hello3.wasm 文件到项目Asset/wasm_module目录,并把helle3.js勾选 “导入为插件” (这些文件在附件中)
- 首个报错:
wasm_module.zip (9.9 KB)
Creator 版本:3.4.1
目标平台: Edge 浏览器
重现方式:
新建HelloWorld项目;
拷贝hello3.js, hello3.wasm 文件到项目Asset/wasm_module目录,并把helle3.js勾选 “导入为插件” (这些文件在附件中)
我是cocos creator新手,接触cc不到3天;对 js 和 creator都不熟悉,按以前的经验做的,请多指教!
描述一下我用wasm的目的: 想用材质的方式实现战场迷雾,因为要频繁更新纹理信息并计算,希望启动一个工作线程做这些操作,然后在某个恰当的时机传递纹理给材质。迷雾的效果和思路参考: Unity3D游戏高性能战争迷雾系统实现 - SChivas - 博客园 (cnblogs.com)
我还想请教一个问题,c++侧引用直接写纹理和设置材质属性相关头文件在哪?
抱歉,目前 Creator 没有一键支持 WASM(Emscripten)的方式。
假设 WASM 模块由 Emscripten 生成,它由一个 .js 和一个相应的 .wasm 组成,我建议你通过如下步骤使用 WASM:
确保你的 .wasm 文件在 assets/ 目录下。
如果你的 .js 文件在 assets/ 目录下,确保它 没有 被勾选为插件脚本。
注意,我们不再推荐插件脚本。
在其它模块中用 ESM 标准语法导入 .js 文件,例如 import factory from '到 .js 的路径'
。请注意此处没有中括号。
在合适的地方,使用 Creator 资源加载 API,以 Uint8Array
的方式加载 .wasm 文件。随后,用该 Uint8Array
对象调用 Ecmascripten 模块函数。举例:
import factory from '到 .js 的路径';
import { assetManager, BufferAsset } from 'cc';
async function loadWasm() {
// 某个异步函数体内
// 以 Uint8Array 的形式加载 .wasm 文件
const wasmBinary = await new Promise<Uint8Array>((resolve, reject) => {
assetManager.loadAny<BufferAsset>('.wasm 的 UUID', (error, asset) => {
if (error) {
reject(error);
} else {
resolve(new Uint8Array(asset.buffer()!));
}
});
// 调用 Emscripten 模块函数
const module = await factory({
wasmBinary,
});
// 你初始化好的 Emscripten 模块
return module;
});
}
关于 Emscripten 模块参数以及 wasmBinary
,见:
你这个代码真的能加载成BufferAsset么?你试过了么?wasm后缀的文件能被识别成BufferAsset?你们不是只能要求bin后缀才能是二进制的么?反正我是没加载成功!
不好意思,忘了讲了,得把它名称改成 .bin 后缀
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。