static void Upgrade_003(SerializedObject spriteMeshSO) { SpriteMesh spriteMesh = spriteMeshSO.targetObject as SpriteMesh; SpriteMeshData spriteMeshData = SpriteMeshUtils.LoadSpriteMeshData(spriteMesh); if (spriteMesh.sprite && spriteMeshData) { TextureImporter textureImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(spriteMesh.sprite)) as TextureImporter; float maxImporterSize = textureImporter.maxTextureSize; int width = 1; int height = 1; SpriteMeshUtils.GetWidthAndHeight(textureImporter, ref width, ref height); int maxSize = Mathf.Max(width, height); float factor = maxSize / maxImporterSize; if (factor > 1f) { SerializedObject spriteMeshDataSO = new SerializedObject(spriteMeshData); SerializedProperty smdPivotPointProp = spriteMeshDataSO.FindProperty("m_PivotPoint"); SerializedProperty smdVerticesProp = spriteMeshDataSO.FindProperty("m_Vertices"); SerializedProperty smdHolesProp = spriteMeshDataSO.FindProperty("m_Holes"); spriteMeshDataSO.Update(); smdPivotPointProp.vector2Value = spriteMeshData.pivotPoint * factor; for (int i = 0; i < spriteMeshData.vertices.Length; ++i) { smdVerticesProp.GetArrayElementAtIndex(i).vector2Value = spriteMeshData.vertices[i] * factor; } for (int i = 0; i < spriteMeshData.holes.Length; ++i) { smdHolesProp.GetArrayElementAtIndex(i).vector2Value = spriteMeshData.holes[i] * factor; } spriteMeshDataSO.ApplyModifiedProperties(); EditorUtility.SetDirty(spriteMeshData); } } }