You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			61 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using System.Collections.Generic; | ||
|  | using UnityEditor; | ||
|  | 
 | ||
|  | public static class AseSpritePostProcess { | ||
|  |     public static Dictionary<string, SerializedProperty> GetPhysicsShapeProperties(TextureImporter importer, | ||
|  |                                                                   List<SpriteMetaData> metaList) { | ||
|  |         SerializedObject serializedImporter = new SerializedObject(importer); | ||
|  |         var property = serializedImporter.FindProperty("m_SpriteSheet.m_Sprites"); | ||
|  |         var res = new Dictionary<string, SerializedProperty>(); | ||
|  |         var removed = new HashSet<int>(); | ||
|  | 
 | ||
|  |         for (int index = 0; index < property.arraySize; index++) { | ||
|  |             var name = importer.spritesheet[index].name; | ||
|  |             if (res.ContainsKey(name)) { | ||
|  |                 continue; | ||
|  |             } | ||
|  | 
 | ||
|  |             var element = property.GetArrayElementAtIndex(index); | ||
|  |             var physicsShape = element.FindPropertyRelative("m_PhysicsShape"); | ||
|  | 
 | ||
|  |             res.Add(name, physicsShape); | ||
|  |             removed.Add(index); | ||
|  |         } | ||
|  | 
 | ||
|  |         return res; | ||
|  |     } | ||
|  | 
 | ||
|  |     public static void RecoverPhysicsShapeProperty( | ||
|  |         Dictionary<string, SerializedProperty> newProperties, | ||
|  |         Dictionary<string, SerializedProperty> oldProperties) { | ||
|  | 
 | ||
|  |         SerializedProperty property = null; | ||
|  |         foreach (var item in newProperties) { | ||
|  |             if (!oldProperties.TryGetValue(item.Key, out var oldItem)) { | ||
|  |                 continue; | ||
|  |             } | ||
|  | 
 | ||
|  |             var newItem = item.Value; | ||
|  |             if (oldItem.arraySize > 0) { | ||
|  |                 newItem.arraySize = oldItem.arraySize; | ||
|  | 
 | ||
|  |                 for (int index = 0; index < newItem.arraySize; index++) { | ||
|  |                     var newShape = newItem.GetArrayElementAtIndex(index); | ||
|  |                     var oldShape = oldItem.GetArrayElementAtIndex(index); | ||
|  |                     newShape.arraySize = oldShape.arraySize; | ||
|  | 
 | ||
|  |                     for (int pi = 0; pi < newShape.arraySize; pi++) { | ||
|  |                         var newPt = newShape.GetArrayElementAtIndex(pi); | ||
|  |                         var oldPt = oldShape.GetArrayElementAtIndex(pi); | ||
|  |                         newPt.vector2Value = oldPt.vector2Value; | ||
|  |                     } | ||
|  |                 } | ||
|  |                  | ||
|  |                 if (property == null) | ||
|  |                     property = newItem; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         property?.serializedObject.ApplyModifiedPropertiesWithoutUndo(); | ||
|  |     } | ||
|  | } |