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#
		
	
| 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();
 | |
|     }
 | |
| } |