Unity Mecanim动画的实现(九):动画层、遮罩与Ik动画

1.动画层

    (1)新建动画层 

这里写图片描述
可以通过
(2)动画层的属性。
这里写图片描述

Weight代表某个动画层的权重,权重为0,该层动画不对模型产生影响,权重为1时,将产生最大影响。
Mask:动画遮罩
Blending,该层动画与其他层动画的混合方式,包括Override(复写方式,即取不同层动画的中间值)和additive(直接叠加)。
Sync,同步。同步是本层动画直接同步其他层动画状态之间的逻辑状态,一般需要选取同步源。同步之后需要给本层的动画状态添加动画剪辑。
IK Pass即本层动画是否支持IK动画。

2.遮罩

    遮罩表示遮住某个部位的动画,即被遮着的部位将不会在本动画剪辑中运动。遮罩可以在两个地方进行设置: 

- 在Animation动画剪辑中的Mask,下图红色的右臂将在本剪辑中将不再运动。。
这里写图片描述
- 在动画层中,将Mask启用,并添加Avatar Mask资源(在Asset中添加即可),通过在Avatar Mask中设定红色部分,也可以添加遮罩,在动画图层添加的遮罩只影响本层的所有动画状态。

3.IK动画(可用于制作人物爬铁塔、楼梯的动画?)

    一般的人物动画是由根骨骼带动下级骨骼运动,比如大手臂带动小手臂运动,然后带动手指运动。但是有时候,会反过来,比如取一件东西,一般是手指头先动,最后带动身体运动。这是需要用到IK动画。制作IK动画需要现在动画层中启用IK Pass。IK动画在脚本中实现控制。比如我们需要右手取东西,可以通过如下代码实现:
using UnityEngine;
using System.Collections;

public class IKBehaviourScript : MonoBehaviour {

    public Transform HandPoint;//需要抓取的地点
    public bool isIK;
    private Animator _animator;

    // Use this for initialization
    void Start () {
        _animator=GetComponent<Animator>();
    }

    // Update is called once per frame
    void OnAnimatorIK () {//IK动画必须在这个函数里面调用,这个动画也是和Update类似
        if(isIK){
            _animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1f);//启动右手Position的IK动画,如果权重为0则为不启用。
            _animator.SetIKRotationWeight(AvatarIKGoal.RightHand,1f);//启动右手Rotation的IK动画,如果权重为0则为不启用。
            _animator.SetIKPosition(AvatarIKGoal.RightHand,HandPoint.position);//改变右手位置抓取物体;
            _animator.SetIKRotation(AvatarIKGoal.RightHand,HandPoint.rotation);//改变右手旋转抓取物体;

        }else{          
            _animator.SetIKPositionWeight(AvatarIKGoal.RightHand,0f);//启动右手Position的IK动画,如果权重为0则为不启用。
            _animator.SetIKRotationWeight(AvatarIKGoal.RightHand,0f);//启动右手Rotation的IK动画,如果权重为0则为不启用。
        }
    }
}

可以做IK动画一般包括左右手和脚,通过SetIKPositionWeight、SetIKRotationWeight与AvatarIKGoal来进行编辑;同时还可以通过SetLookAtWeight和SetLookAt来实现头部的IK动画。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值