Skip to content

Commit f83c75e

Browse files
committed
bug, null attachments at slot animation
1 parent 91e4487 commit f83c75e

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

Assets/UnitySpineImporter/Scripts/Editor/Util/SpineUtil.cs

+28-5
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,15 @@ static void createFolderIfNoExists(string root, string folderName){
448448
Directory.CreateDirectory(path);
449449
}
450450

451+
452+
public static string getFirstAttachmentName(SpineSlotAnimation spineSlotAnimation){
453+
for (int i = 0; i < spineSlotAnimation.attachment.Count; i++) {
454+
if (!string.IsNullOrEmpty( spineSlotAnimation.attachment[i].name))
455+
return spineSlotAnimation.attachment[i].name;
456+
}
457+
return "";
458+
}
459+
451460
public static void addSlotAnimationToClip(AnimationClip clip,
452461
Dictionary<string, SpineSlotAnimation> slotsAnimation,
453462
SpineData spineData,
@@ -461,11 +470,18 @@ public static void addSlotAnimationToClip(AnimationClip
461470
SpineSlotAnimation slotAnimation = kvp.Value;
462471
if (slotAnimation.attachment != null && slotAnimation.attachment.Count > 0){
463472
Dictionary<string, AnimationCurve> curveByName = new Dictionary<string, AnimationCurve>();
473+
474+
464475
for (int i = 0; i < slotAnimation.attachment.Count; i++) {
476+
bool nullAttachment = false;
465477
SpineSlotAttachmentAnimation anim = slotAnimation.attachment[i];
466-
if (string.IsNullOrEmpty( anim.name))
467-
continue;
478+
if (string.IsNullOrEmpty( anim.name)){
479+
anim.name=getFirstAttachmentName(slotAnimation);
480+
nullAttachment = true;
481+
}
468482

483+
if (anim.name.Equals(""))
484+
continue;
469485
AnimationCurve enableCurve;
470486
if (curveByName.ContainsKey(anim.name)){
471487
enableCurve = curveByName[anim.name];
@@ -481,7 +497,7 @@ public static void addSlotAnimationToClip(AnimationClip
481497
curveByName.Add(defaultAttachment, defSlotCurve);
482498

483499
if (anim.time !=0.0f){
484-
defSlotCurve.AddKey(KeyframeUtil.GetNew(0, 1, TangentMode.Stepped));
500+
defSlotCurve.AddKey(KeyframeUtil.GetNew(0, nullAttachment ? 0 : 1, TangentMode.Stepped));
485501
defSlotCurve.AddKey(KeyframeUtil.GetNew((float)anim.time, 0, TangentMode.Stepped));
486502
} else {
487503
defSlotCurve.AddKey(KeyframeUtil.GetNew(0, 0, TangentMode.Stepped));
@@ -490,11 +506,18 @@ public static void addSlotAnimationToClip(AnimationClip
490506
}
491507
}
492508

493-
enableCurve.AddKey(KeyframeUtil.GetNew((float)anim.time, 1, TangentMode.Stepped));
509+
enableCurve.AddKey(KeyframeUtil.GetNew((float)anim.time, nullAttachment ? 0 : 1, TangentMode.Stepped));
494510
if (i< (slotAnimation.attachment.Count - 1)){
495511
SpineSlotAttachmentAnimation nextAnim = slotAnimation.attachment[i+1];
496-
if (!nextAnim.name.Equals(anim.name))
512+
bool nullNextAttachment =false;
513+
if (string.IsNullOrEmpty( nextAnim.name)){
514+
nextAnim.name=getFirstAttachmentName(slotAnimation);
515+
nullNextAttachment = true;
516+
}
517+
518+
if (!nextAnim.name.Equals(anim.name) || nullNextAttachment)
497519
enableCurve.AddKey(KeyframeUtil.GetNew((float)nextAnim.time, 0, TangentMode.Stepped));
520+
498521
}
499522
}
500523
foreach(KeyValuePair<string, AnimationCurve> kvp2 in curveByName){

0 commit comments

Comments
 (0)