Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Assets/AnimationImporter/Editor/AnimationImporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -469,14 +469,15 @@ private void CreateSprites(ImportedAnimationSheet animationSheet, AnimationImpor

// create sub sprites for this file according to the AsepriteAnimationInfo
importer.spritesheet = animationSheet.GetSpriteSheet(
sharedData.applySliceParameter,
sharedData.spriteAlignment,
sharedData.spriteAlignmentCustomX,
sharedData.spriteAlignmentCustomY);

// reapply old import settings (pivot settings for sprites)
if (animationSheet.hasPreviousTextureImportSettings)
{
animationSheet.previousImportSettings.ApplyPreviousTextureImportSettings(importer);
animationSheet.previousImportSettings.ApplyPreviousTextureImportSettings(importer, sharedData.applySliceParameter);
}

// these values will be set in any case, not influenced by previous import settings
Expand Down
22 changes: 15 additions & 7 deletions Assets/AnimationImporter/Editor/AnimationImporterWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,21 @@ sprite values

importer.sharedData.targetObjectType = (AnimationTargetObjectType)EditorGUILayout.EnumPopup("Target Object", importer.sharedData.targetObjectType);

importer.sharedData.spriteAlignment = (SpriteAlignment)EditorGUILayout.EnumPopup("Sprite Alignment", importer.sharedData.spriteAlignment);

if (importer.sharedData.spriteAlignment == SpriteAlignment.Custom)
{
importer.sharedData.spriteAlignmentCustomX = EditorGUILayout.Slider("x", importer.sharedData.spriteAlignmentCustomX, 0, 1f);
importer.sharedData.spriteAlignmentCustomY = EditorGUILayout.Slider("y", importer.sharedData.spriteAlignmentCustomY, 0, 1f);
}
EditorGUILayout.BeginHorizontal();
importer.sharedData.applySliceParameter = EditorGUILayout.Toggle("Apply Slice Parameter", importer.sharedData.applySliceParameter);
EditorGUILayout.EndHorizontal();

// no longer need setting SpriteAlignment and \pivot when Apply Slice Parameter
if (!importer.sharedData.applySliceParameter)
{
importer.sharedData.spriteAlignment = (SpriteAlignment)EditorGUILayout.EnumPopup("Sprite Alignment", importer.sharedData.spriteAlignment);

if (importer.sharedData.spriteAlignment == SpriteAlignment.Custom)
{
importer.sharedData.spriteAlignmentCustomX = EditorGUILayout.Slider("x", importer.sharedData.spriteAlignmentCustomX, 0, 1f);
importer.sharedData.spriteAlignmentCustomY = EditorGUILayout.Slider("y", importer.sharedData.spriteAlignmentCustomY, 0, 1f);
}
}

importer.sharedData.spritePixelsPerUnit = EditorGUILayout.FloatField("Sprite Pixels per Unit", importer.sharedData.spritePixelsPerUnit);

Expand Down
41 changes: 30 additions & 11 deletions Assets/AnimationImporter/Editor/Aseprite/AsepriteImporter.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using UnityEngine;
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using Random = UnityEngine.Random;
Expand Down Expand Up @@ -121,7 +122,7 @@ private static ImportedAnimationSheet CreateAnimationSheetFromMetaData(Animation
private static bool CreateSpriteAtlasAndMetaFile(AnimationImportJob job)
{
char delimiter = '\"';
string parameters = "--data " + delimiter + job.name + ".json" + delimiter + " --sheet " + delimiter + job.name + ".png" + delimiter + " --sheet-pack --list-tags --format json-array " + delimiter + job.fileName + delimiter;
string parameters = "--data " + delimiter + job.name + ".json" + delimiter + " --sheet " + delimiter + job.name + ".png" + delimiter + " --sheet-pack --list-tags --list-slices --format json-array " + delimiter + job.fileName + delimiter;

if (!string.IsNullOrEmpty(job.additionalCommandLineArguments))
{
Expand Down Expand Up @@ -278,8 +279,9 @@ private static bool GetAnimationsFromJSON(ImportedAnimationSheet animationSheet,
}

private static bool GetFramesFromJSON(ImportedAnimationSheet animationSheet, JSONObject root)
{
var list = root["frames"].Array;
{
var list = root["frames"].Array;
var sliceParameter = root["meta"].Obj["slices"]?.Array[0];

if (list == null)
{
Expand All @@ -288,17 +290,34 @@ private static bool GetFramesFromJSON(ImportedAnimationSheet animationSheet, JSO
return false;
}

foreach (var item in list)
for (var index = 0; index < list.Length; index++)
{
ImportedAnimationFrame frame = new ImportedAnimationFrame();

var frameValues = item.Obj["frame"].Obj;
frame.width = (int)frameValues["w"].Number;
frame.height = (int)frameValues["h"].Number;
frame.x = (int)frameValues["x"].Number;
frame.y = animationSheet.height - (int)frameValues["y"].Number - frame.height; // unity has a different coord system

frame.duration = (int)item.Obj["duration"].Number;
var frameValues = list[index].Obj["frame"].Obj;
var assighnedSliceParameter = sliceParameter?.Obj["keys"].Array.FirstOrDefault(s => s.Obj["frame"].Number == index);

frame.width = assighnedSliceParameter != null ?
(int)assighnedSliceParameter.Obj["bounds"].Obj["w"].Number :
(int)frameValues["w"].Number;
frame.height = assighnedSliceParameter != null ?
(int)assighnedSliceParameter.Obj["bounds"].Obj["h"].Number :
(int)frameValues["h"].Number;
frame.x = assighnedSliceParameter != null ?
(int)(frameValues["x"].Number + assighnedSliceParameter.Obj["bounds"].Obj["x"].Number) :
(int)frameValues["x"].Number;
var y = assighnedSliceParameter != null ?
(int)(frameValues["y"].Number + assighnedSliceParameter.Obj["bounds"].Obj["y"].Number) :
(int)frameValues["y"].Number;
frame.y = animationSheet.height - y - frame.height; // unity has a different coord system
frame.pivotX = assighnedSliceParameter != null ?
(int)assighnedSliceParameter.Obj["pivot"].Obj["x"].Number :
frame.pivotX;
frame.pivotY = assighnedSliceParameter != null ?
(int)assighnedSliceParameter.Obj["pivot"].Obj["y"].Number :
frame.pivotY;

frame.duration = (int)list[index].Obj["duration"].Number;

animationSheet.frames.Add(frame);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,23 @@ public AnimationTargetObjectType targetObjectType
{
_targetObjectType = value;
}
}

[SerializeField]
}

[SerializeField]
private bool _applySliceParameter = false;
public bool applySliceParameter
{
get
{
return _applySliceParameter;
}
set
{
_applySliceParameter = value;
}
}

[SerializeField]
private SpriteAlignment _spriteAlignment = SpriteAlignment.BottomCenter;
public SpriteAlignment spriteAlignment
{
Expand All @@ -70,7 +84,7 @@ public SpriteAlignment spriteAlignment
}
}

[SerializeField]
[SerializeField]
private float _spriteAlignmentCustomX = 0;
public float spriteAlignmentCustomX
{
Expand Down
33 changes: 19 additions & 14 deletions Assets/AnimationImporter/Editor/Config/PreviousImportSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,28 +39,33 @@ public void GetTextureImportSettings(string filename)
}
}

public void ApplyPreviousTextureImportSettings(TextureImporter importer)
public void ApplyPreviousTextureImportSettings(TextureImporter importer, bool isAppliedSliceParameter)
{
if (!_hasPreviousTextureImportSettings|| importer == null)
{
return;
}

// apply old pivot point settings
// we assume every sprite should have the same pivot point
if (_previousFirstSprite.HasValue)
{
var spritesheet = importer.spritesheet; // read values
// I assume every SLICED sprite shourd have the new pivot point
if (isAppliedSliceParameter)
{
return;
}
// apply old pivot point settings
// we assume every sprite should have the same pivot point
if (_previousFirstSprite.HasValue)
{
var spritesheet = importer.spritesheet; // read values

for (int i = 0; i < spritesheet.Length; i++)
{
spritesheet[i].alignment = _previousFirstSprite.Value.alignment;
spritesheet[i].pivot = _previousFirstSprite.Value.pivot;
}
for (int i = 0; i < spritesheet.Length; i++)
{
spritesheet[i].alignment = _previousFirstSprite.Value.alignment;
spritesheet[i].pivot = _previousFirstSprite.Value.pivot;
}

importer.spritesheet = spritesheet; // write values
}
}
importer.spritesheet = spritesheet; // write values
}
}

// ================================================================================
// analyzing animations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public string name
public int y;
public int width;
public int height;
public float pivotX;
public float pivotY;

public int duration; // in milliseconds as part of an animation

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ private Regex GetRegexFromNonLoopingAnimationNames(List<string> value)
// Sprite Data
// --------------------------------------------------------------------------------

public SpriteMetaData[] GetSpriteSheet(SpriteAlignment spriteAlignment, float customX, float customY)
public SpriteMetaData[] GetSpriteSheet(bool isAppliedSliceParameter, SpriteAlignment spriteAlignment, float customX, float customY)
{
SpriteMetaData[] metaData = new SpriteMetaData[frames.Count];

Expand All @@ -247,13 +247,22 @@ public SpriteMetaData[] GetSpriteSheet(SpriteAlignment spriteAlignment, float cu
ImportedAnimationFrame spriteInfo = frames[i];
SpriteMetaData spriteMetaData = new SpriteMetaData();

// sprite alignment
spriteMetaData.alignment = (int)spriteAlignment;
if (spriteAlignment == SpriteAlignment.Custom)
{
spriteMetaData.pivot.x = customX;
spriteMetaData.pivot.y = customY;
}
// sprite alignment
spriteMetaData.alignment = (int)spriteAlignment;
if (isAppliedSliceParameter)
{
spriteMetaData.alignment = (int)SpriteAlignment.Custom;
spriteMetaData.pivot.x = spriteInfo.pivotX / spriteInfo.width;
spriteMetaData.pivot.y = (spriteInfo.height - spriteInfo.pivotY) / spriteInfo.height;
}
else
{
if (spriteAlignment == SpriteAlignment.Custom)
{
spriteMetaData.pivot.x = customX;
spriteMetaData.pivot.y = customY;
}
}

spriteMetaData.name = spriteInfo.name;
spriteMetaData.rect = new Rect(spriteInfo.x, spriteInfo.y, spriteInfo.width, spriteInfo.height);
Expand Down