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

项目设置->物理->碰撞矩阵->碰撞组 修改名称报错
image
[Window] Cannot read properties of undefined (reading ‘find’)
TypeError: Cannot read properties of undefined (reading ‘find’)
at VueComponent.saveEdit (D:\Apps\CocosEditors\Creator\3.8.6\resources\app.asar\builtin\project\dist\contributions\project-physics.ccc:1:1782)
at click (eval at createFunction (D:\Apps\CocosEditors\Creator\3.8.6\resources\app.asar\node_modules\vue\dist\vue.js:11632:18), :3:1543)
at invokeWithErrorHandling (D:\Apps\CocosEditors\Creator\3.8.6\resources\app.asar\node_modules\vue\dist\vue.js:3700:32)
at Kt.invoker (D:\Apps\CocosEditors\Creator\3.8.6\resources\app.asar\node_modules\vue\dist\vue.js:1529:22)
at Kt. (D:\Apps\CocosEditors\Creator\3.8.6\resources\app.asar\node_modules\vue\dist\vue.js:8013:37)
at Kt.sentryWrapped (D:\Apps\CocosEditors\Creator\3.8.6\resources\app.asar\node_modules@sentry\browser\cjs\helpers.js:93:17)

【7.31】打开程序管理器报错,必现
之前可以不填的,现在会报错

这个spine,i找不到。我修改成_3_8了还是很多引用spine.h报错。iOS的原生怎么处理这样的升级啊

没有引入,非常抱歉,这个没有注意到。

预制体已经挂载脚本的情况下,新增变量,原有挂载的组件不会新加变量。
必须得重新挂载一个组件才有新的变量显示!这样子很麻烦,很多东西要重新设置一遍


image

0731版本似乎在给自定义shader的 material.setProperty 不应用,缓冲池回收后再次使用才应用。

0702版本没有问题。

@ccclass('CustomMaskRect')
@executeInEditMode
export class CustomMaskRect extends Component {

    _sprite: Sprite = null;

    @property
    private _center: Vec2 = v2(0, 0);
    @property
    public get center(): Vec2 { return this._center; }
    public set center(v: Vec2) { this._center = v; this.refreshMaterial(); }

    @property
    private _size: Size = size(200, 100);
    @property
    public get size(): Size { return this._size; }
    public set size(v: Size) { this._size = v; this.refreshMaterial(); }

    @property
    private _softEdge: number = .02;
    @property({ slide: true, range: [0, 20, .001] })
    public get softEdge(): number { return this._softEdge; }
    public set softEdge(v: number) { this._softEdge = v; this.refreshMaterial(); }

    @property
    private _cornerRadius: number = 10;
    @property
    public get cornerRadius(): number { return this._cornerRadius; }
    public set cornerRadius(v: number) { this._cornerRadius = v; this.refreshMaterial(); }

    protected onLoad(): void {
        this.refreshMaterial();
    }

    refreshMaterial() {
        if (this._sprite == null) this._sprite = this.node.getComponent(Sprite);
        if (this._sprite == null || this._sprite.spriteFrame == null) return;
        let material = this._sprite.getSharedMaterial(0);
        if (material) {
            material.setProperty('param0', v4(this.center.x, this.center.y, this.size.width, this.size.height));
            material.setProperty('param1', v4(this.softEdge, this.cornerRadius, 0, 0));
        }
    }

    update() {
        EDITOR && this.refreshMaterial();
    }
}


最新版本调用无效:(0702这么写没问题)

        let maskNode = ResourceHelper.CustomMaskRectPool.getNode();
        maskNode.setParent(this.node);
        let rect = maskNode.getComponent(CustomMaskRect);
        let pos = this.stage2d.gamePanel.itemFrozenButton.node.worldPosition;
        rect.center = v2(pos.x, pos.y);
        rect.size = size(300, 300);
        rect.cornerRadius = 30;

试试看这个pr?

@457491559 可以看看这个小问题吗

3.8.7 20250702版本,在设置active的时候会报错,报错的概率还是很大。 setNodeActivity 时通过 toggle切换回调用到。


    private setNodeActivity(node: Node, active: boolean) {
        if (node && isValid(node.active)) {
            node.active = active;
        }
    }

TypeError: Cannot read properties of null (reading ‘0’)
at e.updateUVs
at i._flushAssembler
at i.__preload
at i.__preload
at eval (eval at WE \u003canonymous\u003e:3:65)
at e._invoke
at i.invoke
at e.activateNode
at i.set
at r.setNodeActivity

能否给一下 demo 呢?我这边测试能正常,或者录制一下复现的视频

预制体,点更新到资源就会导致引用该预制体的地方丢失引用,还得重新拖拽,一直没修复

点击更新到资源时,控制台有警告吗,或者你拖入的引用是嵌套的



页面做了个背景截图,第二次打开的时候就会有问题

复现不了了,奇怪

稳定复现的,这个问题。在场景中编辑,挂一个脚本,脚本上放一个meshrender或者啥的,然后吧这个节点上的mesh拖到这个slot上,保存为预制体,就会看到slot 引用丢失了

你拖到 slot 上时,控制台有警告吗?

ps:空闲时,给个 demo 吧

assets.zip (7.5 KB) 先把FullWater的meshrender放到node上的脚本的render slot里面去。然后把node拖成一个预制体。就发现hierarchy里面的预制体的node上的脚本render slot引用丢了 。engine 3.8.7

你好,感谢反馈。这个是因为同步了 spine c++的官方代码
3.8最新的代码要求slot需要有对应的attachment,可以看下官方代码
第 484 行的逻辑是官方新增的。

所以针对这个问题,如果你觉得对你有影响,可以修改对应文件,然后自己重新编译wasm 替换目标文件

尝试修复了,试下这个pr? https://github.com/cocos/cocos-engine/pull/18880

美术说把这2个勾掉就好了,确实在3.8.7可以播了,不清楚是为什么:open_mouth::dash:

1赞