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",