From 2bc88270d41b09373aa10f9528a6cdea20a947c7 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Fri, 2 Apr 2021 12:25:23 +0200 Subject: [PATCH] [unity] Fixed Texture 'Max Size' setting causing incorrect image regions (e.g. in repack operations). Closes #1871. --- .../Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs index 1dff4e33e..dc1bb29fc 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Utility/AtlasUtilities.cs @@ -533,6 +533,15 @@ namespace Spine.Unity.AttachmentTools { if (output == null) { Texture2D sourceTexture = texturePropertyId == 0 ? ar.GetMainTexture() : ar.GetTexture(texturePropertyId); Rect r = ar.GetUnityRect(); + // Compensate any image resizing due to Texture 'Max Size' import settings. + // sourceTexture.width returns the resized image dimensions, at least in newer Unity versions. + if (sourceTexture.width < ar.page.width) { + float scaleX = (float)(sourceTexture.width) / (float)(ar.page.width); + float scaleY = (float)(sourceTexture.height) / (float)(ar.page.height); + var scale = new Vector2(scaleX, scaleY); + r = new Rect(r.position * scale, r.size * scale); + } + int width = (int)r.width; int height = (int)r.height; output = new Texture2D(width, height, textureFormat, mipmaps, linear) { name = ar.name };