-
Creator 版本:3.7.1
-
目标平台: 无,编辑器环境。
-
重现方式:
自定义组件:spriteSync.ts
组件功能:编辑模式下调整该组件的 sprite 属性时,同步修改 Sprite组件的 spriteFrame 属性。
import { _decorator, Component, Node, Sprite, SpriteFrame } from 'cc';
const { ccclass, property, executeInEditMode } = _decorator;
@ccclass('spriteEditor')
@executeInEditMode(true)
export class spriteEditor extends Component {
@property({
type: SpriteFrame
})
private _sprite: SpriteFrame;
@property({
type: SpriteFrame
})
public set sprite(v: SpriteFrame) {
this._sprite = v;
this.getComponent(Sprite).spriteFrame = this.sprite;
}
public get sprite(): SpriteFrame {
return this._sprite
};
start() {
}
update(deltaTime: number) {
}
}
首先,新建一个场景 scene.scene,通过 Create > 2D Object > Sprite 新建两个 Sprite,一个命名为 NonPrefab,另一个命名为 Prefab,然后将 Prefab 往 Asset 拖去,让它变成 预制件。
最后给他们都挂上 spriteSync 组件。(图中是 spriteEdiotr,但这不关键)
然后,同步修改两个节点上 spriteSync 组件的 sprite 属性,都改成 atom,可以看到从 Scene 窗口中看到两个节点的贴图都修改成功了。
接着保存 scene.scene,先退出该场景,然后再打开 scene.scene。
问题就出现了,NonPrefab 的 spriteFrame 依旧是 atom,那个 Prefab 的 spriteFrame 属性现在为空了。
复现Demo见附件 >>>> SpriteSyncBug.zip (23.7 KB)
-
首个报错: 无
-
编辑器操作系统: Windows
-
重现概率: 100%






