时间: 2017/8/7
但是我遇到了麻烦, 在从 DragonBones 导入 Swordsman 案例之后 游戏人物 的动画出现了问题.
但是给游戏中的 Swordsman 对象 挂上代码之后 运行 就成这样了.
###原因:
是代码问题.
第一: 是没有在 Start()
方法里面将初始状态的动画清除掉.
第二: 我的思路是将 steady
, walk
, jump
归为一组(我这里只用了这3个位移动画, 没有用到 steady2
等其他的 位移动画). 然后在代码里面 我在修改一个动画时(比如从 steady
状态 变成 walk
状态), 没有将之前的 steady
状态停止并设置为 null
.
###解决方法:
#####1. 首先是 需要在 Start()
方法里面写句代码
// 提示: _armatureComponent 是在 Awake() 里面拿到的 UnityArmatureComponent 组件
void Start ()
{
// 这一步很重要, 如果没有将 初始动画消除的话, 会叠加到 Update方法 的动画里面
_armatureComponent.animation.Reset ();
}
即 在游戏一开始就清除所有的游戏状态, 放在初始状态叠加到后面的游戏状态上, 而我一开始出现的 播放动画导致图片错乱有一部分原因就是这个导致的.
#####2. 在同一组动画中 切换动画时, 记得将同组中的其他动画(DragonBones.AnimationState)关闭
如我这边的 jump
动画播放时
/**
* 跳跃
*/
private void _jump ()
{
// 判断是否在地面上
if (PlayerIsOnGround ()) {
// 1. 改变状态
_curState = PlayerState.JUMP;
// 2. 淡入跳跃动画
_jumpState = _armatureComponent.animation.FadeIn ("jump", -1.0f, 1, 0, NORMAL_ANIMATION_GROUP, AnimationFadeOutMode.SameGroup);
_jumpState.timeScale = 2.0f; // 控制 某个动画状态 的 播放速度
_jumpState.autoFadeOutTime = 0.1f; // 对于限定播放次数的动画, 会自动淡出
// 3. 添加位移
rb.AddForce (new Vector2 (0, accel));
// 4. 将 Jump 同组的其他动画停掉, 并设置成 null
// 将idel 状态停掉, 并设置成null
if (_idelState != null) {
_idelState.FadeOut (0.1f);
_idelState = null;
}
// 将run 状态停掉, 并设置成null
if (_runState != null) {
_runState.FadeOut (0.1f);
_runState = null;
}
}
}
完整项目地址: https://github.com/tackor/Unity-DragonBones-Demo.git