Unity DragonBone 动画遮罩与混合

项目中使用了DragonBones来做2D骨骼动画,分享一下有关动画遮罩和混合的注意点。

需求:场景中有一匹马,马背上有一个持红缨枪的武士,要求马一直处于奔跑的状态,马背上的人可以播放攻击、防御动画。由于版权原因,我这里使用白鹭官方的小白人做演示吧。

1.动画片段(人物奔跑)


image

2.动画片段(手舞足蹈)


image

3.实现如下动画(混合动画)


image

关于动画遮罩与混合:

  • 动画遮罩

    动画遮罩就是只将动画的一部分呈现出来,如下代码就是控制upperbody骨骼播放Squat动画,其它骨骼维持原姿势不动。

_handAnimationState=_armatureComponent.animation.
        GotoAndPlayByTime("Squat",0.1f,0);
        _handAnimationState.AddBoneMask("upperbody");
  • 动画混合

    动画混合是指一个骨架同时可以播放多个动画,例如以下代码可以让角色一边跑步一边手舞足蹈。

//播放手部动画
        _handAnimationState=_armatureComponent.animation.
        GotoAndPlayByTime("Squat",0.1f,0);
        _handAnimationState.layer=1;
        _handAnimationState.AddBoneMask("upperbody");

        //播放奔跑的动画
        _legsAnimationState=_armatureComponent.animation.FadeIn("Run",0.1f,0);
        _legsAnimationState.layer=0;

在DragonBones中骨骼动画在运行时有一个组的概念,我们可以让动画在一个组中播放,当另外一个动画被设置为在相同组中播放时,之前正在播放的动画就会停止,所以,为了能够同时播放动画,需要把要同时播放的动画放在不同的组中,在本示例中,将跑步的动画放到下半身组中,手舞足蹈的动画放到上半身组中,就可以实现一边跑步、一边手舞足蹈了。

完整代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DragonBones;
public class BlendAndMask : MonoBehaviour {
    public UnityArmatureComponent _armatureComponent;
    //手部动画状态
    private DragonBones.AnimationState _handAnimationState;
    //腿部动画状态
    private DragonBones.AnimationState _legsAnimationState;

    // Use this for initialization
    void Start () {
        //播放手部动画
        _handAnimationState=_armatureComponent.animation.
        GotoAndPlayByTime("Squat",0.1f,0);
        _handAnimationState.layer=1;
        _handAnimationState.AddBoneMask("upperbody");

        //播放奔跑的动画
        _legsAnimationState=_armatureComponent.animation.
        FadeIn("Run",0.1f,0);
        _legsAnimationState.layer=0;

    }
}

参考《DragonBones官方文档》

更多内容,欢迎关注:


码码小虫

猜你喜欢

转载自blog.csdn.net/JianZuoGuang/article/details/81171623