Skip to content

Commit 35cc04e

Browse files
Dispose ragdoll resources (#16874)
fixes #16867
1 parent f52223c commit 35cc04e

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

packages/dev/core/src/Physics/v2/ragdoll.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type { Nullable } from "../../types";
1010
import type { Bone } from "../../Bones/bone";
1111
import { Logger } from "../../Misc/logger";
1212
import { TransformNode } from "../../Meshes/transformNode";
13+
import type { Observer } from "core/Misc/observable";
1314

1415
/**
1516
* Ragdoll bone properties
@@ -81,6 +82,7 @@ export class Ragdoll {
8182
private _rootBoneIndex: number = -1;
8283
private _mass: number = 10;
8384
private _restitution: number = 0;
85+
private _beforeRenderObserver: Nullable<Observer<Scene>> = null;
8486

8587
/**
8688
* Pause synchronization between physics and bone position/orientation
@@ -362,7 +364,7 @@ export class Ragdoll {
362364
}
363365

364366
this._initJoints();
365-
this._scene.registerBeforeRender(() => {
367+
this._beforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {
366368
this._syncBonesAndBoxes();
367369
});
368370
this._syncBonesToPhysics();
@@ -392,5 +394,19 @@ export class Ragdoll {
392394
for (const aggregate of this._aggregates) {
393395
aggregate.dispose();
394396
}
397+
this._aggregates.length = 0;
398+
for (const transform of this._transforms) {
399+
transform.dispose();
400+
}
401+
this._transforms.length = 0;
402+
for (const constraint of this._constraints) {
403+
constraint.dispose();
404+
}
405+
this._constraints.length = 0;
406+
407+
if (this._beforeRenderObserver) {
408+
this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver);
409+
this._beforeRenderObserver = null;
410+
}
395411
}
396412
}

0 commit comments

Comments
 (0)