欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity DragonBone 动画遮罩与混合

程序员文章站 2022-07-14 21:36:28
...

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

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

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


Unity DragonBone 动画遮罩与混合

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


Unity DragonBone 动画遮罩与混合

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


Unity DragonBone 动画遮罩与混合

关于动画遮罩与混合:

  • 动画遮罩

    动画遮罩就是只将动画的一部分呈现出来,如下代码就是控制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官方文档》

更多内容,欢迎关注:


Unity DragonBone 动画遮罩与混合