10
10
using System . Collections . Generic ;
11
11
using System . IO ;
12
12
using System . Text ;
13
+ using System . Linq ;
13
14
using UnityEditor ;
14
15
using UnityEngine ;
15
16
@@ -175,7 +176,7 @@ public static void SpriteSheetExporter() {
175
176
} // if (selectedTexture != null)
176
177
} // foreach (Object activeObject in selectedTextures)
177
178
}
178
-
179
+
179
180
[ MenuItem ( "SpriteTextureSliceExporter/ImageSliceExporter" ) ]
180
181
public static void ImageSliceExporter ( ) {
181
182
var selectedTextures = Selection . GetFiltered ( typeof ( Texture2D ) , SelectionMode . Assets ) ;
@@ -278,4 +279,64 @@ internal struct SheetFrame
278
279
public Vector2 pivot ;
279
280
public Rect rect ;
280
281
}
282
+
283
+
284
+ [ MenuItem ( "SpriteTextureSliceExporter/Export Slices" ) ]
285
+ public static void ExportSlices ( ) {
286
+ // var selectedTextures = Selection.GetFiltered(typeof(Texture2D), SelectionMode.Assets);
287
+ // if (selectedTextures.Length == 0) {
288
+ // EditorUtility.DisplayDialog("ImageSliceExporter", "Please select texture", "OK");
289
+ // return;
290
+ // }
291
+ var outputDirectory = GetOutputDirectory ( ) ;
292
+ // var outputDirectory = Application.persistentDataPath;
293
+
294
+ var assetPaths = Selection . assetGUIDs
295
+ . Select ( AssetDatabase . GUIDToAssetPath )
296
+ // .Select(path => Path.ChangeExtension(path, null))
297
+ . Select ( AssetDatabase . LoadAllAssetsAtPath )
298
+ . ToArray ( ) ;
299
+ Debug . Log ( $ "ExportSlicesContext, len={ assetPaths . Length } { string . Join ( System . Environment . NewLine , ( object [ ] ) assetPaths ) } ") ;
300
+ foreach ( var subassets in assetPaths ) {
301
+ Debug . Log ( $ "ExportSlicesContext, subasset len={ subassets . Length } { string . Join ( System . Environment . NewLine , ( object [ ] ) subassets ) } ") ;
302
+ var sprites = subassets
303
+ . Where ( x => x is Sprite )
304
+ . Cast < Sprite > ( )
305
+ . ToArray ( ) ;
306
+ foreach ( var sprite in sprites ) {
307
+ Debug . Log ( $ "ExportSlicesContext inner loop, { sprite . GetType ( ) } = { sprite } ") ;
308
+ var tex = sprite . texture ;
309
+ var r = sprite . textureRect ;
310
+ var subtex = tex . CropTexture ( ( int ) r . x , ( int ) r . y , ( int ) r . width , ( int ) r . height ) ;
311
+ var data = subtex . EncodeToPNG ( ) ;
312
+ var outPath = $ "{ outputDirectory } /{ sprite . name } .png";
313
+ File . WriteAllBytes ( outPath , data ) ;
314
+ Debug . Log ( $ "Wrote to '{ outPath } '") ;
315
+ }
316
+ }
317
+ // foreach (var texture in selectedTextures) {
318
+ // var texture = Resources.Load<Texture2D>(assetPath);
319
+ // Debug.Log($"ExportSlicesContext tex= {texture}");
320
+ // var sprites = Resources.LoadAll<Sprite>(texture.name);
321
+ // Debug.Log($"ExportSlicesContext sprites= {string.Join(System.Environment.NewLine, (object[])sprites)} length={sprites.Length}");
322
+ // foreach (Sprite sprite in sprites) {
323
+ // Debug.Log($"ExportSlicesContext inner loop, {sprite}");
324
+ // var tex = sprite.texture;
325
+ // var r = sprite.textureRect;
326
+ // var subtex = tex.CropTexture( (int)r.x, (int)r.y, (int)r.width, (int)r.height );
327
+ // var data = subtex.EncodeToPNG();
328
+ // var outPath = $"{outputDirectory}/{sprite.name}.png";
329
+ // File.WriteAllBytes(outPath, data);
330
+ // Debug.Log($"Wrote to '{outPath}'");
331
+ // }
332
+ // }
333
+ // var selectedTexture = Selection.activeObject as Texture2D;
334
+ // selectedTexture.
335
+ }
336
+
337
+ [ MenuItem ( "SpriteTextureSliceExporter/Export Slices" , true ) ]
338
+ public static bool ExportSlicesValidation ( ) {
339
+ return Selection . activeObject as Texture2D != null ;
340
+ }
341
+
281
342
}
0 commit comments