zoukankan      html  css  js  c++  java
  • Unity中的动画系统和Timeline(3) 模型和动画导入

    动画导入

    美工做好的模型,直接将文件夹拖进来就导入好了。导入模型后,检查模型的材质贴图等是否丢失,若丢失,根据名字补上。如果美工取名规范,一一对应的话,就很简单。如果不是,那就呵呵哒。

    有的美工做的比较差,所有模型的动画都在一个上面,需要我们后续的动画分割,遇到这种,嗯,心里骂骂就好了。但是,作为一个程序,分割动画真的好麻烦的好吧。

    而有的美工就做的很好了,动画都是单独的,不需要我们后续动画分割,但也有可能会需要一些小的调整。

    选中模型后,Rig表示动画的导入方式

    Node:不导入动画

    Legacy:老版本的动画导入方式,现在基本不会用到了,但是如果用到老版本的资源,也会使用到这个。使用此种方式导入的动画,只能使用Animation组件播放动画,而不能使用新版的动画状态机。

    Generic:新版的动画导入方式,适用于非人型的东西。选择此种方式,要指定Avatar Definition(骨骼映射方式)和Root node(根节点)。其中骨骼映射方式可以选择从当前模型创建和从其它骨骼复制,后者需要两个模型具有相同的骨骼,通常一个美工做的是一样的。参数Optimize Game Object,表示模型优化,建议在打包时勾选。

    注意:此种方式不能使用动画重定向,而且动画的控制,比如移动等,都需要代码控制!!!

    Humanoid:新版的动画导入方式,人型和非人型都能用。这种方式动画不需要代码单独控制,而且相同的骨骼模型可以使用动画重定向

    Bake Into Pose:勾选后表示当前属性不会随动画动作改变

    Based Upon:相当于基点

    Loop match:循环匹配,绿点表示匹配的很好

    动画分割

    选中Animation进行动画分割,勾选Loop Pose表示该动画循环播放

    通过动画状态机播放动画

    导入动画后,将模型拖到场景中,创建的物体身上会自带一个Animator组件,其中的Controller就是动画状态机。动画状态机可以手动创建(右键,Animator Controller),在Animator界面中可以对状态机进行编辑。

    通过代码控制动画状态机

    在Animation界面中的Parameter中,添加一个控制状态,使用这个状态来控制动画的切换。其中,物体的Animator组件控制这些状态。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Biker : MonoBehaviour {
    
        private Animator anim;
    
    	void Start () {
            // 获取Animator组件
            anim = GetComponent<Animator>();
    	}
    	
    	void Update () {
            float v = Input.GetAxisRaw("Vertical");
            // 使用代码控制状态
            anim.SetInteger("Vertical", (int)v);
            //transform.Translate(Vector3.forward * v * Time.deltaTime * 4);
    	}
    }
    

    StringToHash把参数字符串转换成ID:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Biker : MonoBehaviour {
    
        private Animator anim;
        // 转换ID
        int verticalID = Animator.StringToHash("Vertical");
    
    	void Start () {
            // 获取Animator组件
            anim = GetComponent<Animator>();
    	}
    	
    	void Update () {
            float v = Input.GetAxisRaw("Vertical");
            // 使用代码控制状态
            anim.SetInteger(verticalID, (int)v);
            //transform.Translate(Vector3.forward * v * Time.deltaTime * 4);
    	}
    }
    

    动画的反向控制:

    在Curves(曲线)里添加一个状态曲线,左侧添加一个相同名字的参数。在动画运行的时候,因为动画中有这个曲线,所以不能通过代码来控制参数。但是,曲线运动时,在不同时间参数值会根据曲线变化。我们可以获取到这个值来使用,比如,一个添加了角色控制器的角色翻墙,在翻墙动画播放时,有一段时间需要将角色的角色控制器禁用,否则角色控制器会碰到墙壁。这时,设置好曲线,在翻墙动画播放到一个时间段时,禁用角色控制器。

  • 相关阅读:
    github中,一些涉及到用户配置的文件怎么处理(比如数据库用户名/密码)?
    XMLHttpRequest cannot load file浏览器无法异步加载本地file文件
    HTML小技巧
    HTML实体符号代码速查表
    宽度不固定,水平居中
    CSS实现背景透明,文字不透明
    window.inner 兼容IE8
    div横排放置对齐问题;block,inline,inline-block区别
    IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)
    js 值和引用
  • 原文地址:https://www.cnblogs.com/lmx282110xxx/p/10798691.html
Copyright © 2011-2022 走看看