Kevin_meta 2022-11-14 01:17 采纳率: 11.1%
浏览 26
已结题

Unity动画状态机的层与遮罩

两个动画层,base和mask,如何实现在移动状态时使用遮罩动画,待机状态时使用同一个(没有遮罩)动画。
我的设想是在2个层中都加入这个动画,然后在代码中加入移动和非移动时SetLayerWeight(),
但是失败了,它始终只能播放base层的动画.

  • 写回答

1条回答 默认 最新

  • m0_54204465 2023-02-02 08:40
    关注

    在Unity中实现动画层的遮罩可以通过设置动画层的权重来实现。

    在两个动画层中分别添加你的动画,然后在代码中使用Animator.SetLayerWeight(layerIndex, weight)方法来设置动画层的权重,从而控制动画层的混合。在移动状态时,设置遮罩动画层的权重为1,设置base动画层的权重为0,在待机状态时,则相反。

    例如:

    Animator animator;
    int baseLayer = 0;
    int maskLayer = 1;
    
    void Update() {
        if (isMoving) {
            animator.SetLayerWeight(baseLayer, 0);
            animator.SetLayerWeight(maskLayer, 1);
        } else {
            animator.SetLayerWeight(baseLayer, 1);
            animator.SetLayerWeight(maskLayer, 0);
        }
    }
    
    

    请确保在Animator组件中的对应动画层的名称正确设置,并且每个动画层都设置为独立播放,而不是共享同一个状态机。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 11月14日