diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs index 0033ef067..390c2e694 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs @@ -243,6 +243,15 @@ namespace Spine.Unity { state.Update(deltaTime); skeleton.Update(deltaTime); + if (Application.isPlaying) { + Vector2 position = new Vector2(transform.position.x, transform.position.z); + Vector2 positionDelta = position - lastPosition; + positionDelta.x /= transform.lossyScale.x; + positionDelta.y /= transform.lossyScale.z; + skeleton.PhysicsTranslate(positionDelta.x, positionDelta.y); + lastPosition = position; + } + if (updateMode == UpdateMode.OnlyAnimationStatus) { state.ApplyEventTimelinesOnly(skeleton, issueEvents: false); return; 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 a3526858b..aa51b5edc 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs @@ -381,6 +381,15 @@ namespace Spine.Unity { state.Update(deltaTime); skeleton.Update(deltaTime); + if (Application.isPlaying) { + Vector2 position = new Vector2(transform.position.x, transform.position.z); + Vector2 positionDelta = (position - lastPosition) / meshScale; + positionDelta.x /= transform.lossyScale.x; + positionDelta.y /= transform.lossyScale.z; + skeleton.PhysicsTranslate(positionDelta.x, positionDelta.y); + lastPosition = position; + } + if (updateMode == UpdateMode.OnlyAnimationStatus) { state.ApplyEventTimelinesOnly(skeleton, issueEvents: false); return; @@ -474,6 +483,7 @@ namespace Spine.Unity { #region API protected Skeleton skeleton; + public Skeleton Skeleton { get { Initialize(false); @@ -518,6 +528,9 @@ namespace Spine.Unity { } } + /// Used for applying Transform translation to skeleton physics. + protected Vector2 lastPosition; + [SerializeField] protected Spine.Unity.MeshGenerator meshGenerator = new MeshGenerator(); public Spine.Unity.MeshGenerator MeshGenerator { get { return this.meshGenerator; } } DoubleBuffered meshBuffers; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs index f070690a5..677481f60 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs @@ -125,6 +125,16 @@ namespace Spine.Unity { return; skeleton.Update(deltaTime); + + if (Application.isPlaying) { + Vector2 position = new Vector2(transform.position.x, transform.position.z); + Vector2 positionDelta = position - lastPosition; + positionDelta.x /= transform.lossyScale.x; + positionDelta.y /= transform.lossyScale.z; + skeleton.PhysicsTranslate(positionDelta.x, positionDelta.y); + lastPosition = position; + } + ApplyAnimation(); } 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 b2dcf7c1c..dd05b9438 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -286,6 +286,9 @@ namespace Spine.Unity { return skeleton; } } + + /// Used for applying Transform translation to skeleton physics. + protected Vector2 lastPosition; #endregion public delegate void SkeletonRendererDelegate (SkeletonRenderer skeletonRenderer); @@ -424,6 +427,7 @@ namespace Spine.Unity { UpdateMode updateModeSaved = updateMode; updateMode = UpdateMode.FullUpdate; UpdateWorldTransform(Skeleton.Physics.Update); + lastPosition = this.transform.position; LateUpdate(); updateMode = updateModeSaved; diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index dfdaaab28..3d5c8acfc 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.41", + "version": "4.2.42", "unity": "2018.3", "author": { "name": "Esoteric Software",