From 96797adeb5f0ca7bbbf1d54b9bfedb43de28397d Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Fri, 31 May 2024 18:09:59 +0200 Subject: [PATCH] [unity] Fixed physics inheritance ignoring transform rotation. Closes #2538. --- .../Runtime/spine-unity/Components/SkeletonGraphic.cs | 9 +++++---- .../Runtime/spine-unity/Components/SkeletonRenderer.cs | 10 ++++++---- spine-unity/Assets/Spine/package.json | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs index d04c9ce4e..dd2970de9 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs @@ -400,12 +400,13 @@ namespace Spine.Unity { if (physicsPositionInheritanceFactor != Vector2.zero) { Vector2 position = GetPhysicsTransformPosition(); Vector2 positionDelta = (position - lastPosition) / meshScale; + + positionDelta = transform.InverseTransformVector(positionDelta); if (physicsMovementRelativeTo != null) { - positionDelta.x *= physicsMovementRelativeTo.lossyScale.x; - positionDelta.y *= physicsMovementRelativeTo.lossyScale.y; + positionDelta = physicsMovementRelativeTo.TransformVector(positionDelta); } - positionDelta.x *= physicsPositionInheritanceFactor.x / transform.lossyScale.x; - positionDelta.y *= physicsPositionInheritanceFactor.y / transform.lossyScale.y; + positionDelta.x *= physicsPositionInheritanceFactor.x; + positionDelta.y *= physicsPositionInheritanceFactor.y; skeleton.PhysicsTranslate(positionDelta.x, positionDelta.y); lastPosition = position; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs index e4a8a89c9..68d1d6f89 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -522,12 +522,14 @@ namespace Spine.Unity { if (physicsPositionInheritanceFactor != Vector2.zero) { Vector2 position = GetPhysicsTransformPosition(); Vector2 positionDelta = position - lastPosition; + + positionDelta = transform.InverseTransformVector(positionDelta); if (physicsMovementRelativeTo != null) { - positionDelta.x *= physicsMovementRelativeTo.lossyScale.x; - positionDelta.y *= physicsMovementRelativeTo.lossyScale.y; + positionDelta = physicsMovementRelativeTo.TransformVector(positionDelta); } - positionDelta.x *= physicsPositionInheritanceFactor.x / transform.lossyScale.x; - positionDelta.y *= physicsPositionInheritanceFactor.y / transform.lossyScale.y; + positionDelta.x *= physicsPositionInheritanceFactor.x; + positionDelta.y *= physicsPositionInheritanceFactor.y; + skeleton.PhysicsTranslate(positionDelta.x, positionDelta.y); lastPosition = position; } diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index adfc83c88..2b090cdbd 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core.", - "version": "4.2.66", + "version": "4.2.67", "unity": "2018.3", "author": { "name": "Esoteric Software",