Hi there,
Sorry about the delay. This is the code I'm using:
void ChangeActiveEquipment(EquipmentDataBase newEquipmentData) {
Timing.KillCoroutines(_changeActiveEquipmentCoroutine);
UpdateSkin(_activeEquipment, newEquipmentData);
float duration = 0;
if (_activeEquipment != null) {
Animation animation = _spineAnimationState.Data.SkeletonData.FindAnimation(GetSwitchAnimationName(_activeEquipment, newEquipmentData));
if (animation != null) {
_spineAnimationState.SetAnimation(0, animation, false);
duration = animation.duration;
}
}
_spineAnimationState.AddAnimation(0, GetAnimationName(IDLE, newEquipmentData.EquipmentTypeAnimationName), true, 0);
_activeEquipment = newEquipmentData;
_changeActiveEquipmentCoroutine = NetworkManager.WaitForSeconds(duration, OnChangeActiveEquipmentComplete);
}
void UpdateSkin(params EquipmentDataBase[] equipmentData) {
Color baseColor = _baseSlot.GetColor();
_loadoutSkin = _loadoutSkin ?? new Skin("Loadout");
_loadoutSkin.Clear();
foreach (EquipmentDataBase equipment in equipmentData) {
if (equipment == null) { continue; }
_loadoutSkin.Append(_spineSkeleton.Data.FindSkin(equipment.AnimationName));
}
_spineSkeleton.SetSkin(_loadoutSkin);
_spineSkeleton.SetSlotsToSetupPose();
_spineAnimationState.Apply(_spineSkeleton);
SetBaseColor(baseColor, 0);
}
static string GetSwitchAnimationName(EquipmentDataBase from, EquipmentDataBase to) {
return string.Format(SWITCH, from.EquipmentTypeAnimationName, to.EquipmentTypeAnimationName);
}
Removing the _spineAnimationState.AddAnimation line results in the animation playing right through. But without it, it gets interrupted early.