【已正式发布】CocosCreator 3.8.7 社区版本公测帖

所有 meta 文件正常生成后或者 场景正常显示了

命令行怎么监听 插件的ready。

命令行就是命令启动了就打开了没有交互,要监听需要写编辑器插件,meta 正常生成去监听 asset-db:ready ,场景正常显示监听 scene:ready ,怎么监听看一下编辑器文档的广播监听消息怎么写。

通过插件监听 场景 ready 在返回给命令行 是这样么。

731下载的打开就崩溃

之前一直没有这个问题的

设置材质的setProperty没作用,正式版会合并这个pr?

想问一下, 引擎3.8.5的sp.SpineSocket不跟随 不知道这个版本修复了吗

啊 这样可以吗,之前遇到一个命令行打包资源异常问题,就是因为资源还未导入完成就开始了打包编译资源,现在我的做法是写了个延迟几分钟再开始打包…

之前的版本,
director.on(DirectorEvent.INIT, ()=>{}) 回调
来初始化东西是正常的,但现在用这个发现没有执行回调,

直接把这个写到挂载到scene的脚本上,没有执行

但如果改成BEFORE_SCENE_LAUNCH事件,就可以正常执行

这是机制有什么改变吗?

我后面自己写了个插件检测到导入spine图片就重新reimport :sweat_smile:

我自己测试原生的好像,界面隐藏了,设置sprite.spriteframe = null, 后面再次显示节点,设置新的spriteframe的时候就会报错:

莫名的好的。 估计编辑器的问题。

快四个月了,还没稳定吗 :joy:, 不是小步快走吗

1赞

3.8.7正式版预计啥时候发布?

cc v3.8.7-0731 版本, 有一个编辑器刷新的问题, 创建一个 pageview,添加一页数据,


我用箭头拉动带 mask 的节点向右移动, 然后 ctrl - z 撤销一下, mask的下 sprite 就不会显示

这个时候不管是直接修改 position 的数据还是直接移动位置,都不会显示, 只有重新设置 mask 的enabled 的值可以显示, 如果最开始是直接设置数值修改位置, 这个时候撤销是显示正常的

编辑器插件扩展importer需要额外刷新一次资源(构建)调试工具进程才有效,是怎么回事? 3.8.6还有效果的。

1赞

importer 用了自定义 class 吗?可以详细描述一下问题

类似 官方 shader graph ,自定义了一种资源。 比如需要刷新一下资源(构建)调试工具进程。才能看到正确的 icon 。否则会报错 can not find importer … 扒拉扒拉。你们可以直接使用 shader graph extension 来测试这个问题。

/**
* :art: 初始化shader材质
*/
private async initShaderMaterials(): Promise {
if (!this.icon) {
console.warn(“:warning: DragonScale: icon组件不存在,无法初始化shader”);
return;
}

    // 保存原始材质
    this.originalMaterial = this.icon.customMaterial;

    // 加载闪白材质
    try {
        // 加载材质资源
        const materialPath = "white";
        const material = await bundleMgr.loadAssetAsync(Constants.BUNDLE_NAME.Material, materialPath, Material);

        if (material) {
            this.whiteMaterial = material;
        } else {
            console.warn("⚠️ 闪白材质加载失败");
        }
    } catch (error) {
        console.error("❌ 加载闪白材质出错:", error);
    }
}


// 播放受击动画
playHitAnimation() {
    if (this.isPlayingHitAnimation || !this.icon) return;

    this.isPlayingHitAnimation = true;

    // 🎨 使用shader实现闪白效果
    this.playWhiteShaderAnimation();
}

/**
 * 🎨 使用shader播放闪白动画
 */
private playWhiteShaderAnimation(): void {
    if (!this.whiteMaterial || !this.icon) {
        // 如果shader不可用,回退到颜色动画
        this.playColorHitAnimation();
        return;
    }

    // 保存原始材质
    const originalMaterial = this.icon.customMaterial;

    // 应用闪白材质
    this.icon.customMaterial = this.whiteMaterial;
    this.isUsingWhiteShader = true;

    // 🎨 创建平滑的闪白过渡动画
    this.playSmoothWhiteTransition(originalMaterial);
}

/**
 * 🎨 播放平滑的闪白过渡动画
 */
private playSmoothWhiteTransition(originalMaterial: Material): void {
    // 动画参数
    const fadeInDuration = 0.08;   // 淡入时间
    const holdDuration = 0.04;     // 保持时间
    const fadeOutDuration = 0.08;  // 淡出时间
    const maxIntensity = 1;      // 最大闪白强度
    const maxScale = 1.2;         // 最大放大倍数

    // 保存原始缩放
    const originalScale = this.node.scale.clone();

    // 创建动画目标对象
    const animationTarget = {
        intensity: 0.0,
        scale: 1.0
    };

    // 第一阶段:从透明到半白(淡入)+ 放大
    tween(animationTarget)
        .to(fadeInDuration, {
            intensity: maxIntensity,
            scale: maxScale
        }, {
            onUpdate: () => {
                // 更新shader参数
                if (this.whiteMaterial && this.icon) {
                    this.whiteMaterial.setProperty('whiteIntensity', animationTarget.intensity);
                }
                // 更新缩放
                if (this.node && this.node.isValid) {
                    this.node.scale = new Vec3(
                        originalScale.x * animationTarget.scale,
                        originalScale.y * animationTarget.scale,
                        originalScale.z
                    );
                }
            }
        })
        // 第二阶段:保持半白状态 + 保持放大
        .delay(holdDuration)
        // 第三阶段:从半白到透明(淡出)+ 缩小
        .to(fadeOutDuration, {
            intensity: 0.0,
            scale: 1.0
        }, {
            onUpdate: () => {
                // 更新shader参数
                if (this.whiteMaterial && this.icon) {

                    this.whiteMaterial.setProperty('whiteIntensity', animationTarget.intensity);
                }
                // 更新缩放
                if (this.node && this.node.isValid) {
                    this.node.scale = new Vec3(
                        originalScale.x * animationTarget.scale,
                        originalScale.y * animationTarget.scale,
                        originalScale.z
                    );
                }
            }
        })
        .call(() => {
            // 动画完成,恢复原始材质和缩放
            if (this.icon && this.icon.isValid) {
                this.icon.customMaterial = originalMaterial;
            }
            if (this.node && this.node.isValid) {
                this.node.scale = originalScale;
            }
            this.isUsingWhiteShader = false;
            this.isPlayingHitAnimation = false;
        })
        .start();
}

3.8.7的7月31日社区版shader有bug,代码里面已经加载好闪白的shader,然后在敌人受击的时候暂停可以看到shader已经加载了,但是页面上看不到闪白的效果,同样的代码和shader在3.8.6里面是没问题

自定义资源的方法我们还没有正式对外哦,不保证接口的稳定性,在正式推出的时候不一定是那样的,谨慎参考,仅供个人研究。

请问有解决节点复用 drawcall 升高吗?
问题版本:3.8.6
问题描述:节点从父节点 A回收后再复用加回父节点 A,drawcall 就会变高,猜测是渲染顺序之类变了?
验证方式:隐藏父节点 A 再激活,dc就恢复正常
测试方式:节点数量可能需要多一点,比较好观察