zoukankan      html  css  js  c++  java
  • Unity中的动画系统和Timeline(4) AvatarMask和IK动画

    AvatarMask(骨骼遮罩)

    在前面角色动画的基础上,角色在奔跑过程中捡起一块木头,双手要抱着这块木头。如果使用前面的方法,直接切换动画,那么就只剩下抱木头的动画,其它动画就没了。这时我们要使用下面的方法。

    在这里创建新的一层,在这个新的层上控制抱木头的动画。

     这里层属性设置中,Weight表示占有权重,Mask表示骨骼遮罩,Blending表示混合类型(Override表示重写,Additive表示在此基础上添加)。其中,Additive适用于,每个层控制不同部位的动画。当混合类型为Override且权重为1时,角色的所有动画都将是本层的。

    在上面的例子中,我们需要用这一层来控制角色抱木头的动画,用到的只有双手,而其它动画和原先一样。所以,我们需要在本层的Mask中添加一个骨骼遮罩。直接右键--Avator Mask可以创建

    创建好后,在Humanoid中,点击各个部位,变红表示重写时不重写这部分,还是用以前的动画。这里双手是绿色的,表示在抱着木头后,双手的动画由本层控制,其它部位的动画还是和以前一样。 

    IK动画

    在上面,我们虽然设置好了角色抱木头的动画,但是可能角色和木头之间位置是不匹配的,我们需要把角色的双手设置到木头上的两个位置点。这个时候就需要用到IK动画了。首先要打开IK Pass,会自动执行函数OnAnimatorIK,在这个函数中我们设置角色的手和位置点匹配。

        private void OnAnimatorIK(int layerIndex)
        {
            // 说明当前是被Hold Log这一层调用
            if (layerIndex == 1)
            {
                // 权重,只有在抱着木头的时候才为1
                int weight = anim.GetBool(isHoldLogID) ? 1 : 0;
                
                // 左手位置匹配
                anim.SetIKPosition(AvatarIKGoal.LeftHand, leftHand.position);
                // 左手旋转匹配
                anim.SetIKRotation(AvatarIKGoal.LeftHand, leftHand.rotation);
                // 设置权重
                anim.SetIKPositionWeight(AvatarIKGoal.LeftHand, weight);
                anim.SetIKRotationWeight(AvatarIKGoal.LeftHand, weight);
    
    
                anim.SetIKPosition(AvatarIKGoal.RightHand, rightHand.position);
                anim.SetIKRotation(AvatarIKGoal.RightHand, rightHand.rotation);
                anim.SetIKPositionWeight(AvatarIKGoal.RightHand, weight);
                anim.SetIKRotationWeight(AvatarIKGoal.RightHand, weight);
            }
        }
  • 相关阅读:
    常见的位运算技巧总结(膜wys)
    BZOJ1878:[SDOI2009]HH的项链
    BZOJ4300:绝世好题
    BZOJ1298:[SCOI2009]骰子的学问
    BZOJ2748:[HAOI2012]音量调节
    BZOJ1951:[SDOI2010]古代猪文
    BZOJ1002:[FJOI2007]轮状病毒
    BZOJ1081:[SCOI2005]超级格雷码
    BZOJ2595:[WC2008]游览计划
    BZOJ1190:[HNOI2007]梦幻岛宝石
  • 原文地址:https://www.cnblogs.com/lmx282110xxx/p/10798687.html
Copyright © 2011-2022 走看看