From 618d4dda67475d5cd323946e87cfaec9b5ede4b6 Mon Sep 17 00:00:00 2001 From: luzhuang Date: Mon, 25 May 2026 20:24:20 +0800 Subject: [PATCH 01/10] fix(loader, animation, physics): cherry-pick fixes from fix/shaderlab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Loader: - componentRef 解析支持 clone entity 子树查找 - always create GLTF_ROOT container for consistent animation paths - normalize gltf wrapper and skin roots - include skinned mesh nodes in skin root LCA - compute skinned bounds from non-joint rootBone - add audio extension to AudioLoader supported types - recognize .m4a/.aac/.flac extensions for audioClip loader - apply scene physics settings - cover stripped entity child attachment Animation: - normalize single-root clip binding paths - add per-instance speed to AnimatorStatePlayData - use per-instance speed during cross fade - update animator - expose clip sampling and gate animation events Physics: - resolve clone-bypass and runtime native handle desync bugs - add DynamicCollider.applyForceAtPosition - remove redundant wakeUp in addForce/addTorque - repair 8 pre-existing test failures (Lite material + PhysX scene queries) - kinematic transform sync via setKinematicTarget - correct collision contact normal orientation - support kinematic transform teleport sync - teleport collider on re-enable instead of sweeping - support PhysX tolerance scale - raycast 和 sweep 跳过 initial overlap Clone: - prefab 克隆时自动 deep clone 同类型 Object 属性 Audio: - restore pending playback correctly - restore sources after background interruption - recover audio after foreground resume --- .husky/_/husky.sh | 1 + packages/core/src/Entity.ts | 93 +- packages/core/src/animation/AnimationClip.ts | 9 + packages/core/src/animation/Animator.ts | 244 ++-- .../src/animation/AnimatorStateInstance.ts | 76 -- .../src/animation/AnimatorStateMachine.ts | 9 +- packages/core/src/animation/index.ts | 2 +- .../internal/AnimationEventHandler.ts | 6 +- .../animation/internal/AnimatorLayerData.ts | 35 +- .../animation/internal/AnimatorStateData.ts | 5 - .../internal/AnimatorStatePlayData.ts | 81 +- packages/core/src/audio/AudioManager.ts | 227 +++- packages/core/src/audio/AudioSource.ts | 137 +- packages/core/src/clone/CloneManager.ts | 126 +- .../core/src/physics/CharacterController.ts | 6 +- packages/core/src/physics/Collider.ts | 59 +- packages/core/src/physics/Collision.ts | 3 +- packages/core/src/physics/DynamicCollider.ts | 90 +- packages/core/src/physics/PhysicsMaterial.ts | 25 +- packages/core/src/physics/index.ts | 7 +- .../core/src/physics/shape/ColliderShape.ts | 20 +- .../src/physics/shape/MeshColliderShape.ts | 61 +- packages/design/src/physics/IPhysics.ts | 10 + packages/loader/package.json | 2 +- packages/loader/src/AudioLoader.ts | 2 +- packages/loader/src/HDRDecoder.ts | 232 ++-- packages/loader/src/MaterialLoader.ts | 22 +- packages/loader/src/PrefabLoader.ts | 4 +- packages/loader/src/SceneLoader.ts | 290 ++-- packages/loader/src/ShaderChunkLoader.ts | 51 + packages/loader/src/ShaderLoader.ts | 30 +- packages/loader/src/SpriteAtlasLoader.ts | 4 +- packages/loader/src/SpriteLoader.ts | 4 +- packages/loader/src/Texture2DLoader.ts | 148 +++ packages/loader/src/TextureCubeLoader.ts | 78 ++ packages/loader/src/TextureLoader.ts | 192 --- packages/loader/src/gltf/GLTFUtils.ts | 2 - .../gltf/extensions/GLTFExtensionSchema.ts | 5 +- .../loader/src/gltf/parser/GLTFSceneParser.ts | 47 +- .../src/gltf/parser/GLTFSkinParser.test.ts | 44 + .../loader/src/gltf/parser/GLTFSkinParser.ts | 53 +- .../src/gltf/parser/GLTFTextureParser.ts | 2 +- packages/loader/src/index.ts | 8 +- packages/loader/src/prefab/PrefabParser.ts | 28 +- packages/loader/src/prefab/PrefabResource.ts | 2 +- .../loader/src/resource-deserialize/index.ts | 5 +- .../resources/mesh/IModelMesh.d.ts | 2 +- .../resources/parser/HierarchyParser.ts | 530 ++++---- .../resources/parser/ParserContext.ts | 40 +- .../resources/parser/ReflectionParser.ts | 370 +++--- .../resources/scene/SceneParser.ts | 96 +- .../resources/schema/BasicSchema.ts | 122 ++ .../resources/schema/MaterialSchema.ts | 111 ++ .../resources}/schema/ProjectSchema.ts | 0 .../resources/schema/SceneSchema.ts | 90 ++ .../resources}/schema/index.ts | 5 +- .../resources/texture2D/Texture2DDecoder.ts | 59 - .../resources/texture2D/TextureDecoder.ts | 77 ++ .../textureCube/TextureCubeDecoder.ts | 64 - packages/loader/src/schema/BasicSchema.ts | 24 - packages/loader/src/schema/CommonSchema.ts | 38 - packages/loader/src/schema/HierarchySchema.ts | 85 -- packages/loader/src/schema/MaterialSchema.ts | 26 - packages/loader/src/schema/PrefabSchema.ts | 5 - packages/loader/src/schema/SceneSchema.ts | 68 - packages/loader/src/schema/refs.ts | 9 - packages/physics-lite/package.json | 2 +- .../physics-lite/src/LitePhysicsMaterial.ts | 24 +- packages/physics-physx/package.json | 2 +- .../physics-physx/src/PhysXDynamicCollider.ts | 102 +- packages/physics-physx/src/PhysXPhysics.ts | 67 +- .../src/shape/PhysXColliderShape.ts | 1 + tests/src/core/Animator.test.ts | 947 +++++--------- tests/src/core/audio/AudioSource.test.ts | 2 +- .../audio/AudioSourcePendingPlayback.test.ts | 358 +++++ tests/src/core/particle/Burst.test.ts | 187 --- .../LimitVelocityOverLifetime.test.ts | 2 +- .../core/particle/ParticleBoundingBox.test.ts | 69 +- .../core/particle/ParticleRenderer.test.ts | 2 +- .../particle/ParticleShapeTransform.test.ts | 270 ---- .../core/particle/ParticleStopResume.test.ts | 142 ++ .../ParticleTextureSheetAnimation.test.ts | 86 +- .../core/particle/RateOverDistance.test.ts | 100 -- .../core/particle/RateOverTimeReplay.test.ts | 145 -- .../core/physics/CharacterController.test.ts | 2 +- tests/src/core/physics/Collider.test.ts | 2 +- tests/src/core/physics/ColliderShape.test.ts | 2 +- tests/src/core/physics/Collision.test.ts | 262 +++- .../src/core/physics/DynamicCollider.test.ts | 341 ++++- tests/src/core/physics/HingeJoint.test.ts | 2 +- tests/src/core/physics/Joint.test.ts | 2 +- .../core/physics/MeshColliderShape.test.ts | 84 +- .../src/core/physics/PhysicsMaterial.test.ts | 52 +- tests/src/core/physics/PhysicsScene.test.ts | 304 +---- tests/src/core/physics/SpringJoint.test.ts | 2 +- tests/src/loader/GLTFLoader.test.ts | 99 +- tests/src/loader/KTX2Loader.test.ts | 2 +- tests/src/loader/PrefabResource.test.ts | 813 ++---------- tests/src/loader/RawAssetLoader.test.ts | 2 +- tests/src/loader/RenderTargetLoader.test.ts | 20 +- tests/src/loader/SceneFormatV2.test.ts | 1164 ----------------- tests/src/loader/SceneParser.test.ts | 6 + tests/src/loader/ScenePhysics.test.ts | 50 + tests/src/loader/StrippedEntity.test.ts | 277 ++++ 104 files changed, 4884 insertions(+), 5520 deletions(-) create mode 120000 .husky/_/husky.sh delete mode 100644 packages/core/src/animation/AnimatorStateInstance.ts create mode 100644 packages/loader/src/ShaderChunkLoader.ts create mode 100644 packages/loader/src/Texture2DLoader.ts create mode 100644 packages/loader/src/TextureCubeLoader.ts delete mode 100644 packages/loader/src/TextureLoader.ts create mode 100644 packages/loader/src/gltf/parser/GLTFSkinParser.test.ts create mode 100644 packages/loader/src/resource-deserialize/resources/schema/BasicSchema.ts create mode 100644 packages/loader/src/resource-deserialize/resources/schema/MaterialSchema.ts rename packages/loader/src/{ => resource-deserialize/resources}/schema/ProjectSchema.ts (100%) create mode 100644 packages/loader/src/resource-deserialize/resources/schema/SceneSchema.ts rename packages/loader/src/{ => resource-deserialize/resources}/schema/index.ts (56%) delete mode 100644 packages/loader/src/resource-deserialize/resources/texture2D/Texture2DDecoder.ts create mode 100644 packages/loader/src/resource-deserialize/resources/texture2D/TextureDecoder.ts delete mode 100644 packages/loader/src/resource-deserialize/resources/textureCube/TextureCubeDecoder.ts delete mode 100644 packages/loader/src/schema/BasicSchema.ts delete mode 100644 packages/loader/src/schema/CommonSchema.ts delete mode 100644 packages/loader/src/schema/HierarchySchema.ts delete mode 100644 packages/loader/src/schema/MaterialSchema.ts delete mode 100644 packages/loader/src/schema/PrefabSchema.ts delete mode 100644 packages/loader/src/schema/SceneSchema.ts delete mode 100644 packages/loader/src/schema/refs.ts create mode 100644 tests/src/core/audio/AudioSourcePendingPlayback.test.ts delete mode 100644 tests/src/core/particle/Burst.test.ts delete mode 100644 tests/src/core/particle/ParticleShapeTransform.test.ts create mode 100644 tests/src/core/particle/ParticleStopResume.test.ts delete mode 100644 tests/src/core/particle/RateOverTimeReplay.test.ts delete mode 100644 tests/src/loader/SceneFormatV2.test.ts create mode 100644 tests/src/loader/SceneParser.test.ts create mode 100644 tests/src/loader/ScenePhysics.test.ts create mode 100644 tests/src/loader/StrippedEntity.test.ts diff --git a/.husky/_/husky.sh b/.husky/_/husky.sh new file mode 120000 index 0000000000..7ca6a94c02 --- /dev/null +++ b/.husky/_/husky.sh @@ -0,0 +1 @@ +/Users/wz/Documents/website/engine/.husky/_/husky.sh \ No newline at end of file diff --git a/packages/core/src/Entity.ts b/packages/core/src/Entity.ts index 063fbe1c1c..5b0c929ac1 100644 --- a/packages/core/src/Entity.ts +++ b/packages/core/src/Entity.ts @@ -9,7 +9,7 @@ import { Script } from "./Script"; import { Transform } from "./Transform"; import { UpdateFlagManager } from "./UpdateFlagManager"; import { ReferResource } from "./asset/ReferResource"; -import { EngineObject } from "./base"; +import { EngineObject, Logger } from "./base"; import { CloneUtils } from "./clone/CloneUtils"; import { ComponentCloner } from "./clone/ComponentCloner"; import { ActiveChangeFlag } from "./enums/ActiveChangeFlag"; @@ -105,8 +105,6 @@ export class Entity extends EngineObject { /** @internal */ _scripts: DisorderedArray