예제 #1
0
 public static string getFirstAttachmentName(SpineSlotAnimation spineSlotAnimation)
 {
     for (int i = 0; i < spineSlotAnimation.attachment.Count; i++)
     {
         if (!string.IsNullOrEmpty(spineSlotAnimation.attachment[i].name))
         {
             return(spineSlotAnimation.attachment[i].name);
         }
     }
     return("");
 }
예제 #2
0
        public static void addSlotAnimationToClip(AnimationClip clip,
                                                  Dictionary <string, SpineSlotAnimation> slotsAnimation,
                                                  SpineData spineData,
                                                  AttachmentGOByNameBySlot attachmentGOByNameBySlot)
        {
            foreach (KeyValuePair <string, SpineSlotAnimation> kvp in slotsAnimation)
            {
                string slotName          = kvp.Key;
                string defaultAttachment = spineData.slotDefaultAttachments[slotName];
                if (string.IsNullOrEmpty(defaultAttachment))
                {
                    continue;
                }
                SpineSlotAnimation slotAnimation = kvp.Value;
                if (slotAnimation.attachment != null && slotAnimation.attachment.Count > 0)
                {
                    Dictionary <string, AnimationCurve> curveByName = new Dictionary <string, AnimationCurve>();


                    for (int i = 0; i < slotAnimation.attachment.Count; i++)
                    {
                        bool nullAttachment = false;
                        SpineSlotAttachmentAnimation anim = slotAnimation.attachment[i];
                        if (string.IsNullOrEmpty(anim.name))
                        {
                            anim.name      = getFirstAttachmentName(slotAnimation);
                            nullAttachment = true;
                        }

                        if (anim.name.Equals(""))
                        {
                            continue;
                        }
                        AnimationCurve enableCurve;
                        if (curveByName.ContainsKey(anim.name))
                        {
                            enableCurve = curveByName[anim.name];
                        }
                        else
                        {
                            enableCurve = new AnimationCurve();
                            if (anim.time > 0.0f)
                            {
                                enableCurve.AddKey(KeyframeUtil.GetNew(0, 0.0f, TangentMode.Stepped));
                            }

                            curveByName.Add(anim.name, enableCurve);

                            if (i == 0 && !anim.name.Equals(defaultAttachment))
                            {
                                AnimationCurve defSlotCurve = new AnimationCurve();
                                curveByName.Add(defaultAttachment, defSlotCurve);

                                if (anim.time != 0.0f)
                                {
                                    defSlotCurve.AddKey(KeyframeUtil.GetNew(0, nullAttachment ? 0 : 1, TangentMode.Stepped));
                                    defSlotCurve.AddKey(KeyframeUtil.GetNew((float)anim.time, 0, TangentMode.Stepped));
                                }
                                else
                                {
                                    defSlotCurve.AddKey(KeyframeUtil.GetNew(0, 0, TangentMode.Stepped));
                                }
                            }
                        }

                        enableCurve.AddKey(KeyframeUtil.GetNew((float)anim.time, nullAttachment ? 0 : 1, TangentMode.Stepped));
                        if (i < (slotAnimation.attachment.Count - 1))
                        {
                            SpineSlotAttachmentAnimation nextAnim = slotAnimation.attachment[i + 1];
                            bool nullNextAttachment = false;
                            if (string.IsNullOrEmpty(nextAnim.name))
                            {
                                nextAnim.name      = getFirstAttachmentName(slotAnimation);
                                nullNextAttachment = true;
                            }

                            if (!nextAnim.name.Equals(anim.name) || nullNextAttachment)
                            {
                                enableCurve.AddKey(KeyframeUtil.GetNew((float)nextAnim.time, 0, TangentMode.Stepped));
                            }
                        }
                    }
                    foreach (KeyValuePair <string, AnimationCurve> kvp2 in curveByName)
                    {
                        string         attachmentName = kvp2.Key;
                        AnimationCurve animationCurve = kvp2.Value;
                        string         attachmentPath = spineData.slotPathByName[slotName] + "/" + attachmentName.Replace("/", SLASH_REPLACEMENT);
                        clip.SetCurve(attachmentPath, typeof(GameObject), "m_IsActive", animationCurve);
                    }
                }

                if (slotAnimation.color != null && slotAnimation.color.Count > 0)
                {
                    Debug.LogWarning("slot color animation is not supported yet");
                }
            }
        }
예제 #3
0
 public static string getFirstAttachmentName(SpineSlotAnimation spineSlotAnimation)
 {
     for (int i = 0; i < spineSlotAnimation.attachment.Count; i++) {
         if (!string.IsNullOrEmpty( spineSlotAnimation.attachment[i].name))
             return spineSlotAnimation.attachment[i].name;
     }
     return "";
 }