• 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);
            }
        }
  • 相关阅读:
    Redis设置过期时间
    javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
    123456---com.twoapp.fengkuangqiuqiu---疯狂球球
    123456---com.twoapp.taiKongLvXing---太空旅行
    123457---com.twoapp.shuXueYouXi---小学数学口算
    123456---com.twoapp.huanYingMotro--- 幻影摩托
    123456---com.twoapp.xiaoxiaofeixingyuan---小小飞行员
    123456---com.twoapp.xiaoxiaozuqiujiang---小小足球将
    123457---脑筋急转弯01--com.threeObj03.JiZhuanWan
    123457---小小数学家--com.twoapp.xiaoxiaoshuxuejia
  • 原文地址:https://www.cnblogs.com/lmx282110xxx/p/10798687.html
Copyright © 2020-2023  润新知