Skip to content

Commit a6c365e

Browse files
Fix skinned mesh renderer has incorrect bounding box when there is n… (#2015)
* fix: skinned mesh renderer has incorrect bounding box when there is no root bone --------- Co-authored-by: GuoLei1990 <gl3336563@163.com>
1 parent 57f6c8a commit a6c365e

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

packages/core/src/Renderer.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,8 @@ export class Renderer extends Component implements IComponentCustomClone {
349349
*/
350350
protected override _onDestroy(): void {
351351
super._onDestroy();
352-
this.entity.transform._updateFlagManager.removeListener(this._onTransformChanged);
353352

353+
this._unRegisterEntityTransformListener();
354354
this.shaderData._addReferCount(-1);
355355

356356
const materials = this._materials;
@@ -416,6 +416,13 @@ export class Renderer extends Component implements IComponentCustomClone {
416416
this.entity.transform._updateFlagManager.addListener(this._onTransformChanged);
417417
}
418418

419+
/**
420+
* @internal
421+
*/
422+
protected _unRegisterEntityTransformListener(): void {
423+
this.entity.transform._updateFlagManager.removeListener(this._onTransformChanged);
424+
}
425+
419426
/**
420427
* @internal
421428
*/

packages/core/src/mesh/SkinnedMeshRenderer.ts

+12-5
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ export class SkinnedMeshRenderer extends MeshRenderer {
8686

8787
set rootBone(value: Entity) {
8888
if (this._rootBone !== value) {
89-
this._rootBone?.transform._updateFlagManager.removeListener(this._onTransformChanged);
90-
value.transform._updateFlagManager.addListener(this._onTransformChanged);
89+
this._unRegisterEntityTransformListener();
9190
this._rootBone = value;
91+
this._registerEntityTransformListener();
9292
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
9393
}
9494
}
@@ -173,7 +173,7 @@ export class SkinnedMeshRenderer extends MeshRenderer {
173173
*/
174174
protected override _updateShaderData(context: RenderContext): void {
175175
const entity = this.entity;
176-
const worldMatrix = this._rootBone ? this._rootBone.transform.worldMatrix : entity.transform.worldMatrix;
176+
const worldMatrix = (this._rootBone ?? entity).transform.worldMatrix;
177177
this._updateTransformShaderData(context, worldMatrix);
178178

179179
const shaderData = this.shaderData;
@@ -235,7 +235,7 @@ export class SkinnedMeshRenderer extends MeshRenderer {
235235
*/
236236
override _onDestroy(): void {
237237
super._onDestroy();
238-
this._rootBone?.transform._updateFlagManager.removeListener(this._onTransformChanged);
238+
this._unRegisterEntityTransformListener();
239239
this._rootBone = null;
240240
this._jointDataCreateCache = null;
241241
this._skin = null;
@@ -280,7 +280,14 @@ export class SkinnedMeshRenderer extends MeshRenderer {
280280
* @internal
281281
*/
282282
protected override _registerEntityTransformListener(): void {
283-
// Cancel register listener to entity transform.
283+
(this._rootBone ?? this._entity).transform._updateFlagManager.addListener(this._onTransformChanged);
284+
}
285+
286+
/**
287+
* @internal
288+
*/
289+
protected override _unRegisterEntityTransformListener(): void {
290+
(this._rootBone ?? this._entity).transform._updateFlagManager.removeListener(this._onTransformChanged);
284291
}
285292

286293
/**

0 commit comments

Comments
 (0)