diff --git a/cocos/2d/components/ui-opacity.ts b/cocos/2d/components/ui-opacity.ts index b7116ecdf09..22e16172186 100644 --- a/cocos/2d/components/ui-opacity.ts +++ b/cocos/2d/components/ui-opacity.ts @@ -59,6 +59,8 @@ export class UIOpacity extends Component { */ private _parentOpacity: number = 1.0; + private _parentOpacityResetFlag: boolean = true; + /** * @en * The transparency value of the impact. @@ -97,7 +99,7 @@ export class UIOpacity extends Component { // } // UIRenderer.setEntityColorDirtyRecursively(this.node, dirty); - UIOpacity.setEntityLocalOpacityDirtyRecursively(this.node, dirty, 1, false); + UIOpacity.setEntityLocalOpacityDirtyRecursively(this.node, dirty, this._parentOpacity, false); } } @@ -194,11 +196,16 @@ export class UIOpacity extends Component { } protected _parentChanged (): void { + if (!JSB) { + return; + } const parent = this.node.getParent(); let opacity = 1; if (parent) { this._parentOpacity = this._getParentOpacity(parent); opacity = this._parentOpacity; + } else { + this._parentOpacityResetFlag = true; } UIOpacity.setEntityLocalOpacityDirtyRecursively(this.node, true, opacity, false); } @@ -224,7 +231,12 @@ export class UIOpacity extends Component { public onEnable (): void { this.node.on(NodeEventType.PARENT_CHANGED, this._parentChanged, this); this.node._uiProps.localOpacity = this._parentOpacity * this._opacity / 255; - this._setEntityLocalOpacityRecursively(this.node._uiProps.localOpacity); + if (this._parentOpacityResetFlag) { + this._parentChanged(); + this._parentOpacityResetFlag = false; + } else { + this._setEntityLocalOpacityRecursively(this.node._uiProps.localOpacity); + } } public onDisable (): void {