Unity3D高级动画(Animator)-动画状态机
动态系统种类:
Animation动画状态机:是旧版的动画状态机
Animator动画状态机:是新版的动画状态机,其实就是由Animation组成的(这里我们常用这个)
Animator的使用:
(1)从网上找的3D模型FBX文件,包括了模型的动画文件,模型材质等,是一个完整的资源(自带Animator)。这里我们用的人形模型。新建unity工程,将模型文件导到Assets目录。选中模型,在Inspector窗体可见:
Rig里我们可以设置动画类型,默认设为Generic。如果是要使用Mecanim提供的动画retargeting等功能,那就需要将动画类型设为Humanoid。要设置循环播放该动画,勾选Animations里Loop Time即可。
这里要想动画在运行后动,那就要将动画预制物的属性修改为Humanoid 如下图:
(2)准备好模型后,创建一个动画控制器Animator Controller(如果是Legacy动画模式,不需要创建动画控制器。Legacy是4.0版本前的标准动画模式,功能较弱,使用也简单)。
(3)把模型拖到Scene里,给模型Animator组件的Controller指定动画控制器。如需使用脚本控制模型位置,取消Apply Root Motion选项。
(4)打开Animator窗口(双击动画控制器可以打开Animator窗口),将之前导入的模型相关动画拖入窗口(将对应动画片段拖入生成新节点,就可以编辑了)。
Entry(绿色节点):表示当进入当前状态机时的入口,该状态连接的状态会成为进入状态机后的第一个状态;
橙色节点:相当于旧动画系统的默认片段(新建的第一个节点默认为橙色,自动与 Entry 连接,成为进入状态机后的第一个状态);
Any State:表示任意的状态,其作用是其指向的状态是在任意时刻都可以切换过去的状态;
Exit:表示退出当前的状态机,如果有任意状态指向该出口,表示可以从指定状态退出当前的状态机;
灰色节点:
设置默认片段
建立基础连线
箭头代表两个动画的过渡
任何状态都可以连线到death,甚至包括自己到自己
取消death过渡到自己的选择
建立过渡条件,添加参数,有4种(用来方便通过代码激活参数,实现动画切换)
默认过渡条件:Has Exit Time,播放完当前动画才会进行到下一动画的过渡。当有条件时,取消勾选;无条件,默认勾选
最后给游戏物体添加脚本,控制参数的激活
案例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class gangcancel : MonoBehaviour
{private Animator anim;// Start is called before the first frame updatevoid Start(){anim = this.GetComponent<Animator>();}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.N)){anim.SetTrigger("New Trigger"); //由dance1转到dance2}if (Input.GetKeyUp(KeyCode.M)){anim.SetTrigger("2");//由dance2转到dance1}}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class catcancel : MonoBehaviour
{private Animator anim;public int jumpPower = 200;public int speed = 2;private Rigidbody rig;private Transform t;// Start is called before the first frame updatevoid Start(){anim = this.GetComponent<Animator>();rig = this.GetComponent<Rigidbody>();t = this.GetComponent<Transform>(); //获取本身和所有子子物体}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.Space)){anim.SetTrigger("jump");rig.AddForce(transform.up * jumpPower);}if (Input.GetKey(KeyCode.W)) //当按下W键时,向前移动{t.Translate(t.forward * Time.deltaTime * speed);anim.SetFloat("speed", 2);}if (Input.GetKeyUp(KeyCode.W)) {anim.SetFloat("speed", 0);}if (Input.GetKey(KeyCode.S))//当按下S键时,向后移动{t.Translate(-t.forward * Time.deltaTime * speed);anim.SetFloat("speed", 2);}if (Input.GetKeyUp(KeyCode.S)){anim.SetFloat("speed", 0);}}
}
Unity3D高级动画(Animator)-动画状态机相关推荐
- 『ANDROID』android animator 动画
原文地址:android animator 动画 animator 动画 动画的作用是让UI有动感, 看上去时尚. Android中动画分两种方式: 一种方式是补间动画Tween Animation, ...
- 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Animator动画状态机...
Animator是unity 4版本之后的新动画 可以在编辑器中直接编辑连线各个动画的转换,也可以是用代码直接调用底层来转换动画 代码: 1 using UnityEngine; 2 using Sy ...
- 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...
- Unity——在运行时修改Animator Controller状态机中的动画片段
在开发中,经常会有在运行时根据对象的不同状态来修改播放动画的需求.比如做一个射击游戏,那么持手枪时.攻击使用的动画片段明显是不能与持匕首时相同的. 原先用Legacy Animation时,是可以很方 ...
- 【Unity3D】Animator动画播放时卡死在第一帧BUG系列
常见因素: 1.Animator在Update或其他每帧执行的协程或方法里疯狂被代码调用. 2.Animator动画播放事件会再次调用Animator动画播放. 3.Animator状态机切换问题,A ...
- Unity动画知识之二:Animator动画状态机
文/拉撒路 上次我们讲过 Unity游戏动画从入门到住院 ,今天我们来讲一下动画状态机. 好了,现在我们已经成功的导入了动画.接下来要玩的东西就很装13啦.因为大部分动画师是用不到这家伙的,需要掌握这 ...
- Animator动画状态机
1.有限状态机 有限状态机(Finite - state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 有限:表示是有限度 ...
- 用Unity的Animation播放Animator动画Clip
简单的动画,其实不需要Animator动画状态机管理,用Animation播放效率更高,但可能由于历史遗留问题,或网上下载的第三方资源,得到的是Animator资源,可以在Clip的Debug试图下, ...
- unity 对Animator动画系统的研究
unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...
最新文章
- ubuntu 21.04对source.list.d目录的介绍(软件源、换源)
- 神经网络中的反向传播算法
- 计算机网络第2章(物理层)
- python刷阅读_简单的37行python爬虫刷CSDN博客阅读数
- LeetCode每日一题:14.longest-common-prefix(最长公共前缀)
- vb串口 任意波特率_串口通讯基本知识
- SQLite的sqlite3_column_blob函数
- php不能连接远程mysql_无法远程连接mysql怎么办
- SSH框架 openSessionInView的配置
- 一名优秀项目经理需具备的五种基本素质及八大管理技能
- 我的回忆和有趣的故事 by李维(台湾)
- CodeForces-831A-Unimodal Array (水题)
- 汝州九峰山下自产自销的好蜂蜜
- wpf 导航菜单_WPF:精简导航菜单
- 传实缴注册资本要5亿,那些想上市的P2P平台顶得住吗?...
- 图像处理: 设计 自定义透明度 水印
- python之不同公司不同年份同一财务指标比较(柱状图)
- 国际最顶尖的AI技术发展,愈像一场比拼资金与人才的竞赛
- linux centos 7 docker下载mysql5.7
- ZYNQ-Linux学习笔记(2)-在Xilinx SDK中建立Linux应用程序
热门文章
- Word分块矩阵之间的长竖杠或分隔符怎么打?
- Android UID的分配、查看及相关知识
- Ridge和Lasso回归
- 数据结构课程设计:约瑟夫生者死者游戏(c++实现、单循环链表、输出死者姓名和编号、附可执行源代码)
- Latex中TikZ绘制3D圆锥体
- 网络安全就业有什么要求?可算来了,给大家了解一下网络安全就业篇学习大纲
- python时间序列预测不连续怎么办_Python建模:预测周期性时间序列的正确姿势
- mysql 记录四则混合运算_作业三—简易四则混合运算
- 常用正则表达式大全包含经纬度c语言,Python利用正则表达式分离经纬度
- c语言二维vector大小,vector作为二维数组