1、DragonBones的动画文件中,若包含多个骨架,不能使用Load预制件的方式加载,原因是应该不能正确的获取到骨架Armature,导致各种空值,而DragonBones.UnityArmatureComponent 中的armuture又是只读的,无法为它赋值。可以使用两种方式解决:
A.手动拖拽预制件到场景中;
B.使用官方方式动态加载:
//Load Mecha Data
DragonBones.UnityFactory.factory.LoadDragonBonesData("animator/enymy/Action_role3/dacingalien_ske");
DragonBones.UnityFactory.factory.LoadTextureAtlasData("animator/enymy/Action_role3/dacingalien_tex");
// Build Mecha Armature
DragonBones.UnityArmatureComponent armature = DragonBones.UnityFactory.factory.BuildArmatureComponent("anim_start_0011");
2、为防止DragonBones动画完成事件重复注册,在注册之前先移除再注册。
public float ChangeAnim(string name, int playTimes = 0, DragonBones.ListenerDelegate<DragonBones.EventObject> listener = null)
{
DragonBones.AnimationState animationState = playerArmatureComp.animation.Play(name, playTimes);
if (preListener != null)
{
playerArmatureComp.RemoveDBEventListener(DragonBones.EventObject.COMPLETE, preListener);
preListener = null;
}
if (listener != null)
{
preListener = listener;
playerArmatureComp.AddDBEventListener(DragonBones.EventObject.COMPLETE, listener);
}
return animationState.totalTime;
}