关于js的worker

可以用,也替代方案,你可以搜一下

嗯,替代方案是assetManager,
但我这么写还是不对

    assetManager.loadAny('resources/worker/BulletPhysicsWorker', TextAsset, (err, textAsset) => {
    assetManager.loadAny('resources/worker/BulletPhysicsWorker.js', TextAsset, (err, textAsset) => {
    assetManager.loadAny('worker/BulletPhysicsWorker', TextAsset, (err, textAsset) => {
    assetManager.loadAny('worker/BulletPhysicsWorker.js', TextAsset, (err, textAsset) => {

无论是上面那种,都是404,

设置成插件

老哥,可以麻烦说一下详细步骤吗,我之前没怎么接触过插件

我甚至使用了 resources.loadDir(“worker/”, JavaScript, (err, textAsset:JavaScript[]) => {的方式去加载,但是获取的textAsset是一个空数组,已经抓狂了。。。

resources assetManager都不是,他们是加载资源对象,获取资源内容的,你现在的需求是拿到资源的原始路径。

放到aseets平级的library文件夹内

这个不勾选,你就用cc.url.raw

劳烦问一下,放过去后应该用什么方式去获取呢?

没法用的,3.x版本连cc都没了,namespace cc下的url也没有raw方法。只能用assetManager去拿。

找到地方了,在js文件的inspector里有一个导入为插件,但是我添加后该怎么去获取?继续用assetManager去loadAny还是怎么操作?

cc 是window下的一个属性,可以拿到的,而且url在最新的3.8.6也没有被移除,在保留废弃api的前提下是可以拿到的

如果非常执着 就看下这个吧 cc.url.raw 2.4+ 替代 感谢jare 大大

1.前端js项目是可以直接引入一路径去new worker的
2.在cocos中没有路径引入了,因为都打包成了一个js文件,曲线救国,用Blob包裹一段js字符串 就可以运行了,类似于worker(blob),我之前成功过

我就是引了半天,怎么搞都是404才来问的。。。什么assetManager,resources,loadBundle,直接按照路径丢,这个文件也放在各种位置都试了。。。
Blob确实可以用,但直接把js代码当字符串丢进去,感觉不太优雅啊。。。

微信小游戏的话好像比较好处理,修改配置并把 js 文件放在配置路径下就好:多线程 Worker | 微信开放文档

其它渠道可以把 js 文件放到远程 CDN,走远程加载。

如果要放本地的话,建议放 resources,假设放在 assets/resources/workers/my-worker.js,可以试试:

// 假设你的 worker 脚本在 assets/resources/workers/my-worker.js
import { resources, Asset } from 'cc';

// 加载 worker 脚本并获取其 URL
resources.load('workers/my-worker', Asset, (err, asset) => {
    if (err) {
        console.error('Failed to load worker script:', err);
        return;
    }
    
    // 获取资源的原生 URL
    const workerUrl = asset.nativeUrl;
    
    // 创建 Web Worker
    const worker = new Worker(workerUrl);
    
    worker.onmessage = (event) => {
        console.log('Message from worker:', event.data);
    };
    
    worker.postMessage('Hello from main script!');
});

配置成插件后,需要区分下环境
预览时:“plugins/” + js在项目内的路径(plugins/assets/xxx/xxx.js)
构建后:“src/” + js在项目内的路径(src/assets/xxx/xxx.js)

我现在找到原因了,之所以一直是404,我个人推测是因为我一直处于开发调试模式下,我刚才试着打个版本出来,然后在对应的build-template中去放上worker,然后再调用new Worker(“workers/xxxworker.js”)就不会404了。。。。

那问题又回来了,难道我想调试worker,难道要么使用blob,要么每次都得初版本吗。。。

有build-templates就有preview-templates

让ai写了个python打包工具配置在jenkins上,worker.js内容还是一样编写,只是在打包步骤前加一个,将worker.js内容写入到指定文件方法内,这样操作pc上web环境里你还是正常worker用,打包环境实现成blob但你不需要关心