• Unity 动画知识点


    动画下载网站: mixamo
    如果下载的动画表现比较怪异,注意调整Unity的骨骼映射

    动画Clip
    动画状态机
    动画替身 Avatar

    切换参数:
    在这里插入图片描述
    Trigger类型 类似Bool, 只是执行了,自动会改变值位默认值,适合攻击一次的动作

    添加动画切换的条件
    在这里插入图片描述
    HasExitTime, 取消勾选,当前动画没有播放完成就可以切换到下个动画

    使用代码改变参数值,从而改变动画状态

     public Animator animator;
    
        int AttackID = Animator.StringToHash("Attack");
       
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.W))
            {
                //animator.SetTrigger("Attack");
                animator.SetTrigger(AttackID);  //和上面的代码其实是等价的
            }
    
          /*  if (Input.GetKeyDown(KeyCode.N))
            {
                animator.SetBool("Walk", false);
            }*/
    
            if (Input.GetKeyDown(KeyCode.R))
            {
                animator.SetBool("Run", true);
            }
    
            if (Input.GetKeyDown(KeyCode.I))
            {
                animator.SetBool("Idle", true);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    int AttackID = Animator.StringToHash(“Attack”);

    如果不需要那么柔和的空置动画的过度,可以使用更加简单的方式播放动画

    private void Start()
    {
        //Walk为你想播放的Animation动画名称
        GetComponent<Animator>().Play("Walk");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Layer一般用于动画组合
    在这里插入图片描述
    比如有一个持枪动画,有一个行走动画, 可以组合成一个持枪行走的动画

    AutoLiveLink 预览功能
    在这里插入图片描述
    动画状态

     if(keyboard.current.wKey.isPressed){
     	stateInfo=animator.GetCurrentAnimatorStateInfo(animator.GetLayerIndex("Base Layer");
     	if(stateInfo.IsTag("XX")){
     		dosomething();
     	}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    动画倒放
    设置speed=-1

    修改动画播放速度
    Speed不能通过脚本更改,
    但是可以开启 Multiplier 参数, 在代码里面改 参数值
    在这里插入图片描述

    float animationScaler=1f;
    private void SetAnimationScaler(float val){
    	animator.SetFloat("SpeedScale",val);
    //使用静态方法 StringToHash 会稍微节省性能
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    MotionTime
    MotionTime的介于0-1之间,可以乘一个参数 修改其值,
    在代码中使用SetFloat改变 参数值
    0.1 表示 每一帧动画片段向前播放 10%
    在这里插入图片描述
    Mirror 的使用 类似

    在这里插入图片描述

    动画偏移
    动画播放不是从第0帧播放,而是有一定的偏移
    在这里插入图片描述

    FootIK
    正向动力学和反向动力学
    正向动力学: 以动画的根节点位参考,计算子节点的位置和旋转
    反向动力学:已知某一些节点的位置和旋转,比如手和脚,反向计算其他节点的位置和旋转

    激活IK
    在这里插入图片描述

      [Range(0,1)]
        public float IKWeight = 0f;
        private void OnAnimatorIK(int layerIndex)
        {
            //把右脚的IKGoal 设置到 (0,0,0)
            animator.SetIKPosition(AvatarIKGoal.RightFoot, Vector3.zero);
            //改变右脚IK的权重
            animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, IKWeight);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    WriteDefault
    动画属性的默认值,
    这里可能会有很多坑
    参考文章: AnimatorStates中的write defaults详解

  • 相关阅读:
    【无标题】
    第13章 并发编程高阶(二)
    手机数据恢复应用程序有哪些?手机数据恢复免费软件排名TOP 9
    pandas 根据日线生成周线
    iterm2安装记录
    网络安全(黑客)自学
    Django的学习笔记
    6.2 List和Set接口
    [立创&传智&黑马程序员&CSDN]训练营——仿生机械狗
    supervisor的配置与使用
  • 原文地址:https://blog.csdn.net/weixin_36961960/article/details/127648684