/// <summary>
 /// <para>Attachments from the new skin are attached if the corresponding attachment from the old skin was attached.
 /// If there was no old skin, each slot's setup mode attachment is attached from the new skin.</para>
 /// <para>After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling
 /// <see cref="Skeleton.SetSlotsToSetupPose()"/>.
 /// Also, often <see cref="AnimationState.Apply(Skeleton)"/> is called before the next time the
 /// skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.</para>
 /// </summary>
 /// <param name="newSkin">May be null.</param>
 public void SetSkin(Skin newSkin)
 {
     if (newSkin != null)
     {
         if (skin != null)
         {
             newSkin.AttachAll(this, skin);
         }
         else
         {
             ExposedList <Slot> slots = this.slots;
             for (int i = 0, n = slots.Count; i < n; i++)
             {
                 Slot   slot = slots.Items[i];
                 string name = slot.data.attachmentName;
                 if (name != null)
                 {
                     Attachment attachment = newSkin.GetAttachment(i, name);
                     if (attachment != null)
                     {
                         slot.Attachment = attachment;
                     }
                 }
             }
         }
     }
     skin = newSkin;
 }