【Unity动画】状态机添加参数控制动画切换(Animator Controller)

Unity - 手册:动画参数

在Unity中,动画状态的切换是通过Animator Controller中的过渡(Transition)来实现的。过渡是状态之间的连接,控制过渡一般都是靠调用代码参数

我们来实现一个案例:

  1. 创建动画状态机(Animator Controller): 在Unity中,你可以通过创建Animator Controller来管理动画状态。在Unity编辑器中,右键点击Assets窗口,选择Create -> Animator Controller。然后,给它一个合适的名字,如"MyAnimatorController"。

  2. 创建动画状态: 在Animator Controller中,你可以添加各种动画状态。每个状态代表一个动画片段,比如站立、行走、跳跃等。你可以通过拖拽动画资源到Animator Controller中来创建这些状态。

  3. 设置过渡: 在状态之间建立过渡关系。选中一个状态,然后在Inspector窗口中,找到Transitions列表。通过点击"+"按钮添加新的过渡。在过渡的条件中,你可以设置触发状态切换的条件,例如特定的动画参数的值或者触发器的状态。

  4. 设置过渡条件: 在过渡的条件中,你可以设置触发状态切换的条件。这可以是动画参数的值达到某个阈值,或者触发器的状态为真。条件的设置使得状态切换更加灵活,可以根据游戏逻辑和用户输入进行调整。

  5. 使用脚本控制参数: 在游戏脚本中,你可以通过调用Animator组件的方法来修改动画参数的值。例如,使用animator.SetFloat("Forward", v);可以设置名为"Forward"的浮点数参数的值为变量v。

 6.触发状态切换: 当动画参数的值满足过渡条件时,Animator Controller会自动触发状态切换。这可能导致从一个状态过渡到另一个状态,并播放相应的动画。

在脚本种通过

animator.SetFloat("Forward", v);

animator.SetFloat("Strafe", h);

animator.SetBool("Fire", fire);

动画参数的值被设置为输入变量,这可能触发Animator Controller中的状态切换。

  • Integer - 整数
  • Float - 带有小数部分的数字
  • Bool - true 或 false 值(由复选框表示)
  • 触发器 - 一个布尔参数,当过渡使用时由控制器重置(由圆形按钮表示)

可以使用 Animator 类中的函数从脚本中为参数赋值:SetFloat、SetInteger、SetBool、SetTrigger 和 ResetTrigger。

using UnityEngine;
using System.Collections;public class SimplePlayer : MonoBehaviour {Animator animator;// Use this for initializationvoid Start () {animator = GetComponent<Animator>();}// Update is called once per framevoid Update () {float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");bool fire = Input.GetButtonDown("Fire1");animator.SetFloat("Forward",v);animator.SetFloat("Strafe",h);animator.SetBool("Fire", fire);}void OnCollisionEnter(Collision col) {if (col.gameObject.CompareTag("Enemy")){animator.SetTrigger("Die");}}
}

参数的目的和用途:

  1. 用户输入的响应: 在你提供的脚本中,通过获取用户的输入,比如水平和垂直输入,以及按钮的按下,这些输入值被用作动画参数。这样,动画系统就可以根据用户的实际操作来控制动画的播放,使动画更加生动和交互式。

  2. 外部事件的触发: 动画不仅可以由用户输入触发,还可以由游戏中的事件触发。例如,在脚本中,当角色与敌人发生碰撞时,触发了名为"Die"的触发器参数,这会导致动画状态机切换到死亡状态。这样,动画可以根据游戏中的具体事件进行相应的调整。

  3. 动画状态切换的条件: 在动画状态机中,状态之间的切换通常需要满足一些条件。这些条件可以是动画参数的值达到某个阈值,或者某个触发器参数被激活。通过设置参数,你可以灵活地控制状态之间的切换逻辑。

  4. 实现动画混合: 在使用混合树(Blend Tree)时,参数的变化可以用来控制不同动画层的权重。这样可以实现平滑的过渡和混合,使动画过渡更加自然。

总的来说,设置参数使得动画系统能够与游戏逻辑和用户输入相互关联,使得动画在运行时能够根据外部条件的变化而动态调整,从而增强了动画的表现力和交互性。这种动态的调整和响应是游戏中实现生动和流畅动画的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/246990.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

练习十二:利用SRAM设计一个FIFO

利用SRAM设计一个FIFO 1&#xff0c;任务目的2&#xff0c;设计要求3&#xff0c;FIFO接口的设计思路4&#xff0c;FIFO接口的测试&#xff0c;top.v5&#xff0c;FIFO接口的参考设计&#xff0c;fifo_interface.v6&#xff0c;SRAM模型&#xff0c;sram.v代码7&#xff0c;viv…

MySQL笔记-第06章_多表查询

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第06章_多表查询1. 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积&#xff08;或交叉连接&#xff09;的理解1.3 案例分析与问题解决 2. …

【超详细】vue项目:Tinymce富文本使用教程以及踩坑总结+功能扩展

【【超详细】vue项目&#xff1a;Tinymce富文本使用教程以及踩坑总结功能扩展 引言&#xff1a;一、 开始二、快速开始1、安装Tinymce 三、封装成Vue组件1、文件结构2、index.vue3、dynamicLoadScript.js4、plugin.js5、toolbar.js 四、使用Tinymce组件五、业务逻辑实现1、添加…

W2311294-万宾科技可燃气体监测仪怎么进行数据监测

万宾科技可燃气体监测仪怎么进行数据监测 燃气是现代城市之中重要的能源&#xff0c;它已经渗透到城市生活的方方面面&#xff0c;对燃气管网的管理也在考验着政府人员的工作能力。燃气管网的安全运行和城市的安全和人民的生活直接挂钩。为了及时掌握燃气管网的运行状态&#x…

合并两个有序链表[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#…

SQL Server 数据库,多表查询

4.2使用T-SQL实现多表查询 前面讲述过的所有查询都是基于单个数据库表的查询&#xff0c;如果一个查询需要对多个表进行操作&#xff0c; 就称为联接查询&#xff0c;联接查询的结果集或结果称为表之间的联接。 联接查询实际上是通过各个表之间共同列的关联性来查询数据的&…

【模电】基本共射放大电路的工作原理及波形分析

基本共射放大电路的工作原理及波形分析 在上图所示的基本放大电路中&#xff0c;静态时的 I B Q I\tiny BQ IBQ、 I C Q I\tiny CQ ICQ、 U C E Q U\tiny CEQ UCEQ如下图( b )、( c )中虚线所标注。 &#xff08; a &#xff09; u i 的波形&#xff08; b &#xff09; i B …

Autosar MCAL-RH850P1HC Port配置

文章目录 PortPortGroupPortPin PortFilterGroupConfigDigital Filter Clock Selection0Digital Filter Clock Selection1 PortGeneralCritical Section ProtectionDev Error DetectDevice NameMax ModeSet Pin Default Modee ApiSet Pin Modee ApiSet to Dio Alt Modee ApiUse…

【web安全】RCE漏洞原理

前言 菜某的笔记总结&#xff0c;如有错误请指正。 RCE漏洞介绍 简而言之&#xff0c;就是代码中使用了可以把字符串当做代码执行的函数&#xff0c;但是又没有对用户的输入内容做到充分的过滤&#xff0c;导致可以被远程执行一些命令。 RCE漏洞的分类 RCE漏洞分为代码执行…

MySQL笔记-第05章_排序与分页

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第05章_排序与分页1. 排序数据1.1 排序规则1.2 单列排序1.3 多列排序 2. 分页2.1 背景2.2 实现规则2.3 拓展 第05章_排序与分页 讲师&#…

java synchronized详解

背景 在多线程环境下同时访问共享资源会出现一些数据问题&#xff0c;此关键字就是用来保证线程安全的解决这一问题。 内存可见的问题 在了解synchronized之前先了解一下java内存模型&#xff0c;如下图&#xff1a; 线程1去主内存获取x的值读入本地内存此时x的值为1&…

Python Opencv实践 - Yolov3目标检测

本文使用CPU来做运算&#xff0c;未使用GPU。练习项目&#xff0c;参考了网上部分资料。 如果要用TensorFlow做检测&#xff0c;可以参考这里 使用GPU运行基于pytorch的yolov3代码的准备工作_little han的博客-CSDN博客文章浏览阅读943次。记录一下自己刚拿到带独显的电脑&a…