From b49e5cb46063150b4369a2f162f45908b5fbf3a1 Mon Sep 17 00:00:00 2001 From: bd_ Date: Tue, 18 Mar 2025 20:25:30 -0700 Subject: [PATCH] fix: non-divisible-by-four texture sizes breaks automatic expressions menu icon compression (#1508) Closes: #1477 --- CHANGELOG-PRERELEASE-jp.md | 1 + CHANGELOG-PRERELEASE.md | 2 + CHANGELOG-jp.md | 1 + CHANGELOG.md | 2 + .../FixupPasses/FixupExpressionsMenuPass.cs | 11 +- UnitTests~/FixupExpressionsMenuPassTests.meta | 8 + .../123x45px.png | Bin 0 -> 141 bytes .../123x45px.png.meta | 127 ++++++ .../FixupExpressionsMenuPassTests.cs | 35 ++ .../FixupExpressionsMenuPassTests.cs.meta | 3 + .../OddSizedTextureTest.prefab | 402 ++++++++++++++++++ .../OddSizedTextureTest.prefab.meta | 7 + 12 files changed, 595 insertions(+), 4 deletions(-) create mode 100644 UnitTests~/FixupExpressionsMenuPassTests.meta create mode 100644 UnitTests~/FixupExpressionsMenuPassTests/123x45px.png create mode 100644 UnitTests~/FixupExpressionsMenuPassTests/123x45px.png.meta create mode 100644 UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs create mode 100644 UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs.meta create mode 100644 UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab create mode 100644 UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab.meta diff --git a/CHANGELOG-PRERELEASE-jp.md b/CHANGELOG-PRERELEASE-jp.md index 2b1390ee..312effa9 100644 --- a/CHANGELOG-PRERELEASE-jp.md +++ b/CHANGELOG-PRERELEASE-jp.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Fixed +- [#1508] テクスチャのサイズが4の倍数でない場合に、エクスプレッションメニューアイコンの自動圧縮が失敗する問題を修正 ### Changed diff --git a/CHANGELOG-PRERELEASE.md b/CHANGELOG-PRERELEASE.md index 8e7a9fec..b491d49c 100644 --- a/CHANGELOG-PRERELEASE.md +++ b/CHANGELOG-PRERELEASE.md @@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Fixed +- [#1508] Fix an issue where automatic compression of expressions menu icons would fail when the texture dimensions were + not divisible by four. ### Changed diff --git a/CHANGELOG-jp.md b/CHANGELOG-jp.md index eb46a0c8..2deec56f 100644 --- a/CHANGELOG-jp.md +++ b/CHANGELOG-jp.md @@ -22,6 +22,7 @@ Modular Avatarの主な変更点をこのファイルで記録しています。 - [#1410] 同期レイヤー内のモーションオーバーライドがBone Proxy/Merge Armatureオブジェクトの移動に対して更新されない問題を修正 - [#1504] 一部の状況で内部の`DelayDisable`レイヤーが不要なオブジェクトを参照しないように変更 - これにより、オブジェクトがアニメーションされているかどうかを追跡するAAOなどのツールとの互換性が向上します +- [#1508] テクスチャのサイズが4の倍数でない場合に、エクスプレッションメニューアイコンの自動圧縮が失敗する問題を修正 ### Changed - [#1476] ModularAvatarMergeAnimator と ModularAvatarMergeParameter を新しい NDMF API (`IVirtualizeMotion` と `IVirtualizeAnimatorController`) を使用するように変更 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f97ca6b..f351aaae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#1410] Motion overrides on synced layers are not updated for Bone Proxy/Merge Armature object movement - [#1504] The internal `DelayDisable` layer no longer references unnecessary objects in some situations - This helps improve compatibility with AAO and other tools that track whether objects are animated +- [#1508] Fix an issue where automatic compression of expressions menu icons would fail when the texture dimensions were + not divisible by four. ### Changed - [#1476] Switch ModularAvatarMergeAnimator and ModularAvatarMergeParameter to use new NDMF APIs (`IVirtualizeMotion` and `IVirtualizeAnimatorController`) diff --git a/Editor/FixupPasses/FixupExpressionsMenuPass.cs b/Editor/FixupPasses/FixupExpressionsMenuPass.cs index a7a08e2b..4fe33748 100644 --- a/Editor/FixupPasses/FixupExpressionsMenuPass.cs +++ b/Editor/FixupPasses/FixupExpressionsMenuPass.cs @@ -6,7 +6,6 @@ using System.Collections.Immutable; using System.Linq; using UnityEditor; using UnityEngine; -using UnityEngine.Experimental.Rendering; using VRC.SDK3.Avatars.ScriptableObjects; using Object = UnityEngine.Object; @@ -121,9 +120,9 @@ namespace nadena.dev.modular_avatar.core.editor } #if UNITY_ANDROID - private const TextureFormat TargetFormat = TextureFormat.ASTC_4x4; + internal const TextureFormat TargetFormat = TextureFormat.ASTC_4x4; #else - private const TextureFormat TargetFormat = TextureFormat.DXT5; + internal const TextureFormat TargetFormat = TextureFormat.DXT5; #endif private static Texture2D MaybeScaleIcon(BuildContext context, Texture2D original) @@ -133,10 +132,14 @@ namespace nadena.dev.modular_avatar.core.editor return original; } - var newRatio = Math.Min(256f / original.width, 256f / original.height); + var newRatio = Math.Min(1, Math.Min(256f / original.width, 256f / original.height)); var newWidth = Math.Min(256, Mathf.RoundToInt(original.width * newRatio)); var newHeight = Math.Min(256, Mathf.RoundToInt(original.height * newRatio)); + // Round up to a multiple of four + newWidth = (newWidth + 3) & ~3; + newHeight = (newHeight + 3) & ~3; + var newTex = new Texture2D(newWidth, newHeight, TextureFormat.RGBA32, true); context.SaveAsset(newTex); diff --git a/UnitTests~/FixupExpressionsMenuPassTests.meta b/UnitTests~/FixupExpressionsMenuPassTests.meta new file mode 100644 index 00000000..653cc608 --- /dev/null +++ b/UnitTests~/FixupExpressionsMenuPassTests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0728ebdfdba1b344a9101097e4089eff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/FixupExpressionsMenuPassTests/123x45px.png b/UnitTests~/FixupExpressionsMenuPassTests/123x45px.png new file mode 100644 index 0000000000000000000000000000000000000000..24fd628c5d99e35c2675ccc367b5072565e88819 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^)j+Jv!2~23i<%DsDb50q$YKTtZeb8+WSBKa0w`$j z>EaktG3V_CMIi}VZ#(GQ5O2dR|%*91QOJDGy8>Hm74kfYyZ23_Z2b_ cVTN}`j5pUZvxVlaFb0Wuy85}Sb4q9e0D?#(;{X5v literal 0 HcmV?d00001 diff --git a/UnitTests~/FixupExpressionsMenuPassTests/123x45px.png.meta b/UnitTests~/FixupExpressionsMenuPassTests/123x45px.png.meta new file mode 100644 index 00000000..12ab26e0 --- /dev/null +++ b/UnitTests~/FixupExpressionsMenuPassTests/123x45px.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: fdecfaf15af12c94ebc238c62386da03 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs b/UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs new file mode 100644 index 00000000..d9bf9cbd --- /dev/null +++ b/UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs @@ -0,0 +1,35 @@ +#if MA_VRCSDK3_AVATARS + +using System.Linq; +using modular_avatar_tests; +using nadena.dev.modular_avatar.core.editor; +using NUnit.Framework; +using VRC.SDK3.Avatars.Components; + +namespace UnitTests.FixupExpressionsMenuPassTests +{ + public class FixupExpressionsMenuPassTests : TestBase + { + [Test] + public void FixupExpressionsMenuWorksOnOddSizedImages() + { + var prefab = CreatePrefab("OddSizedTextureTest.prefab"); + + AvatarProcessor.ProcessAvatar(prefab); + + var targetMenu = prefab.GetComponent().expressionsMenu; + var targetElem = targetMenu.controls.First(c => c.name == "testmenu"); + + var tex = targetElem.icon; + + // Rounds up to a multiple of four + Assert.AreEqual(124, tex.width); + Assert.AreEqual(48, tex.height); + + // ... which is needed in order for texture compression to succeed + Assert.AreEqual(FixupExpressionsMenuPass.TargetFormat, tex.format); + } + } +} + +#endif \ No newline at end of file diff --git a/UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs.meta b/UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs.meta new file mode 100644 index 00000000..18ac8c2f --- /dev/null +++ b/UnitTests~/FixupExpressionsMenuPassTests/FixupExpressionsMenuPassTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 994ab7b4f445406799527ab1fa22f993 +timeCreated: 1742353952 \ No newline at end of file diff --git a/UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab b/UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab new file mode 100644 index 00000000..8c023e3c --- /dev/null +++ b/UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab @@ -0,0 +1,402 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3990668988804345462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5638450846039665839} + - component: {fileID: 813151555320168457} + - component: {fileID: 3678459968214189440} + - component: {fileID: 4704574485447146425} + m_Layer: 0 + m_Name: OddSizedTextureTest + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5638450846039665839 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3990668988804345462} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.1366987, y: 0.08456379, z: -1.4804463} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7859607209538616757} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &813151555320168457 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3990668988804345462} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 0} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!114 &3678459968214189440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3990668988804345462} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 542108242, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + Name: + ViewPosition: {x: 0, y: 1.6, z: 0.2} + Animations: 0 + ScaleIPD: 1 + lipSync: 0 + lipSyncJawBone: {fileID: 0} + lipSyncJawClosed: {x: 0, y: 0, z: 0, w: 1} + lipSyncJawOpen: {x: 0, y: 0, z: 0, w: 1} + VisemeSkinnedMesh: {fileID: 0} + MouthOpenBlendShapeName: Facial_Blends.Jaw_Down + VisemeBlendShapes: [] + unityVersion: 2022.3.22f1 + portraitCameraPositionOffset: {x: 0, y: 0, z: 0} + portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139} + networkIDs: [] + customExpressions: 0 + expressionsMenu: {fileID: 0} + expressionParameters: {fileID: 0} + enableEyeLook: 0 + customEyeLookSettings: + eyeMovement: + confidence: 0.5 + excitement: 0.5 + leftEye: {fileID: 0} + rightEye: {fileID: 0} + eyesLookingStraight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingUp: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingDown: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingLeft: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingRight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidType: 0 + upperLeftEyelid: {fileID: 0} + upperRightEyelid: {fileID: 0} + lowerLeftEyelid: {fileID: 0} + lowerRightEyelid: {fileID: 0} + eyelidsDefault: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsClosed: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingUp: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingDown: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsSkinnedMesh: {fileID: 0} + eyelidsBlendshapes: + customizeAnimationLayers: 0 + baseAnimationLayers: + - isEnabled: 0 + type: 0 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 4 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 5 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + specialAnimationLayers: + - isEnabled: 0 + type: 6 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 7 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 8 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + AnimationPreset: {fileID: 0} + animationHashSet: [] + autoFootsteps: 1 + autoLocomotion: 1 + collider_head: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_torso: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} +--- !u!114 &4704574485447146425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3990668988804345462} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_Name: + m_EditorClassIdentifier: + launchedFromSDKPipeline: 0 + completedSDKPipeline: 0 + blueprintId: + contentType: 0 + assetBundleUnityVersion: + fallbackStatus: 2 +--- !u!1 &5130770126475706269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7859607209538616757} + - component: {fileID: 1204253887592837851} + - component: {fileID: 4596705629491158387} + m_Layer: 0 + m_Name: testmenu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7859607209538616757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5130770126475706269} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5638450846039665839} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1204253887592837851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5130770126475706269} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ef83cb0c23d4d7c9d41021e544a1978, type: 3} + m_Name: + m_EditorClassIdentifier: + menuToAppend: {fileID: 0} + installTargetMenu: {fileID: 0} +--- !u!114 &4596705629491158387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5130770126475706269} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b29d45007c5493d926d2cd45a489529, type: 3} + m_Name: + m_EditorClassIdentifier: + Control: + name: + icon: {fileID: 2800000, guid: fdecfaf15af12c94ebc238c62386da03, type: 3} + type: 102 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + MenuSource: 1 + menuSource_otherObjectChildren: {fileID: 0} + isSynced: 1 + isSaved: 1 + isDefault: 0 + automaticValue: 1 + label: diff --git a/UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab.meta b/UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab.meta new file mode 100644 index 00000000..893fb23e --- /dev/null +++ b/UnitTests~/FixupExpressionsMenuPassTests/OddSizedTextureTest.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b06e93c5a53eac64a84e4218cc5314f9 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: