mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-04 22:34:53 +08:00
[unity] Handle BoneFollower parent negative matrix scale.
This commit is contained in:
parent
d72f99e01c
commit
ddce81c522
@ -134,10 +134,19 @@ namespace Spine.Unity {
|
|||||||
Vector3 targetWorldPosition = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, 0f));
|
Vector3 targetWorldPosition = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, 0f));
|
||||||
if (!followZPosition) targetWorldPosition.z = thisTransform.position.z;
|
if (!followZPosition) targetWorldPosition.z = thisTransform.position.z;
|
||||||
|
|
||||||
|
float boneWorldRotation = bone.WorldRotationX;
|
||||||
|
|
||||||
|
Transform transformParent = thisTransform.parent;
|
||||||
|
if (transformParent != null) {
|
||||||
|
Matrix4x4 m = transformParent.localToWorldMatrix;
|
||||||
|
if (m.m00 * m.m11 - m.m01 * m.m10 < 0) // Determinant2D is negative
|
||||||
|
boneWorldRotation = -boneWorldRotation;
|
||||||
|
}
|
||||||
|
|
||||||
if (followBoneRotation) {
|
if (followBoneRotation) {
|
||||||
Vector3 worldRotation = skeletonTransform.rotation.eulerAngles;
|
Vector3 worldRotation = skeletonTransform.rotation.eulerAngles;
|
||||||
#if UNITY_5_6_OR_NEWER
|
#if UNITY_5_6_OR_NEWER
|
||||||
thisTransform.SetPositionAndRotation(targetWorldPosition, Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + bone.WorldRotationX));
|
thisTransform.SetPositionAndRotation(targetWorldPosition, Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + boneWorldRotation));
|
||||||
#else
|
#else
|
||||||
thisTransform.position = targetWorldPosition;
|
thisTransform.position = targetWorldPosition;
|
||||||
thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + bone.WorldRotationX);
|
thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + bone.WorldRotationX);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user