【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.mzph.cn/news/194716.shtml

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

相关文章

构造函数的定义

当定义一个构造函数时&#xff0c;它的格式如下&#xff1a; ClassName(parameters) : member1(initializer), member2(initializer), ... {// 构造函数的主体 }其中&#xff1a; ClassName 是结构体或类的名称&#xff0c;表示构造函数所属的结构体或类。parameters 是构造函…

leetcode 142.环形链表2

我来更新 leetcode 题目了&#xff0c;接着上一次&#xff0c;这一次是上一道题目的提升&#xff08;有点数学题的感觉&#xff09; 142.环形链表2 题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表…

识KDJ指标,看懂超买超卖信号

一、认识KDJ 1、KDJ的含义 KDJ分析股票中短期趋势的一个常用指标&#xff0c;中文名称“随机指标”。它是一个综合考虑股票最高价、最低价和收盘价的技术指标&#xff0c;能够帮助我们根据历史价格预测出股票未来的价格走势。在实际应用的过程中&#xff0c;它的短期预测功能要…

JAVA毕业设计113—基于Java+Springboot+Vue的体育馆预约系统(源代码+数据库+12000字论文)

基于JavaSpringbootVue的体育馆预约系统(源代码数据库12000字论文)113 一、系统介绍 本项目前后端分离&#xff0c;本系统分为管理员、用户两种角色 用户角色包含以下功能&#xff1a; 注册、登录、场地(查看/预订/收藏/退订)、在线论坛、公告查看、我的预订管理、我的收藏…

TimeGPT:时间序列预测模型实例

时间序列预测领域正在经历一个非常激动人心的时期。在过去的三年里&#xff0c;我们见证了许多重要的贡献&#xff0c;如N-BEATS、N-HiTS、PatchTST和TimesNet等。同时&#xff0c;大型语言模型&#xff08;LLM&#xff09;近来在流行度方面取得了很大的成功&#xff0c;例如Ch…

PMP-01

考纲 需要看的书籍 学习计划

04-数据库操作对象Statement对象和PreparedStatement对象的区别,SQL注入的优缺点

Statement对象和查询结果集 Statement对象相关的方法 Connection接口中获取数据库操作对象Statement对象的方法 方法名功能Statement createStatement()创建Statement对象 Statement对象执行增删改查的SQL语句(不含占位符"?")的方法,JDBC中的SQL语句不需要提供分…

Verilog 入门(八)(验证)

文章目录 编写测试验证程序波形产生值序列重复模式 测试验证程序实例从文本文件中读取向量实例&#xff1a;时序检测器 测试验证程序用于测试和验证设计方法的正确性。Verilog 提供强有力的结构来说明测试验证程序。 编写测试验证程序 测试验证程序有三个主要目的&#xff1a;…

minigpt4安装的一系列问题

问题一 合并权重&#xff1a; python -m fastchat.model.apply_delta --base /data/qq/llama2-7b-chat-hf --target /data/qq/MiniGPT-4/vicuna_weights/ --delta /data/qq/vicuna-7b-delta-v0fastchat版本与模型版本 不兼容 解决方法&#xff1a; 第一种&#xff1a;用低版…

程序的未定义行为(Undefined Behavior)

未定义行为&#xff08;Undefined Behavior&#xff0c;简称UB&#xff09;是编程中一个重要而复杂的概念&#xff0c;尤其在像C和C这样的低级语言中更为常见。下面是对未定义行为的详细介绍&#xff1a; 定义 未定义行为指的是程序中的某些操作&#xff0c;其效果没有在编程…

【算法】滑动窗口题单——5.多指针滑动窗口醒醒⭐

文章目录 930. 和相同的二元子数组解法1——前缀和 哈希表解法2——滑动窗口 ⭐ 1248. 统计「优美子数组」1712. 将数组分成三个子数组的方案数⭐⭐⭐2444. 统计定界子数组的数目解法——多指针滑动窗口代码2——简洁写法&#xff1a;一次遍历O(1) 空间&#x1f402;⭐ 992. K…

linux之buildroot(4)配置项目

Linux之buildroot(4)配置项目 Author&#xff1a;Onceday Date&#xff1a;2023年12月3日 漫漫长路&#xff0c;才刚刚开始… 全系列文章请查看专栏: buildroot编译框架_Once_day的博客-CSDN博客。 参考文档&#xff1a; Buildroot - Making Embedded Linux Easy 文章目录…

leetcode977. 有序数组的平方

题目描述 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c…

《Junit单元测试》

目录 SpringBoot2.2.0版本之前的单元测试模式 SpringBoot2.2.0版本之后的单元测试模式 SpringBoot2.4以上版本移除了默认对Vintage的依赖 SpringBoot2.2.0版本之前的单元测试模式 SpringBooot 2.2.0 版本开始引入Junit5作为单元测试默认库&#xff0c;之前的版本是使用Junit…

Centos图形化界面封装OpenStack Centos镜像

目录 背景 环境 宿主机环境安装 创建与安装Centos7.8虚机 虚机设置 安全相关 安装ACPI服务 安装cloud-init 安装cloud-utils-growpart 停⽌虚拟机 删除个性化信息 模板化与压缩 登录与验证 背景 今天早上在Centos官网下载的CentOS-7-aarch64-GenericCloud-2003.…

计算机网络——习题

目录 一、填空题 二、选择题 一、填空题 1、在TCP/IP层次模型的网络层中包括的协议主要有 ARP、RARP、ICMP、IGMP 。 2、传输层的传输服务有两大类&#xff1a; 面向连接&#xff08;TCP&#xff09;和 无连接服务&#xff08;UDP&#xff09;。 3、Internet所提供的三项…

nodejs介绍

nodejs官网支持的各种库api https://nodejs.org/docs/latest-v21.x/api/http.html nodejs包括vp8引擎和内置的基本库如fs,path,http,querystring等&#xff0c;也可以用npm按转第三方库 npm是nodejs环境的包管理工具&#xff0c;可以为这个环境安装卸载各种包。 npm install pk…

首款跨语言RPC框架发布

开发历程 2019 ~ 2019 什么跨语言呢&#xff1f;比如你学了Java&#xff0c;你会写Service去调用业务代码&#xff0c;运用了OCP原则&#xff0c;可以使用接口编程&#xff0c;老师告诉我们&#xff0c;这样让接口开放&#xff0c;这样你新增功能的时候&#xff0c;就不用在源…

Javase | 贪吃蛇小游戏

目录: 1.贪吃蛇游戏介绍&#xff1a;&#xff08;该游戏代码不是很完善&#xff0c;可后续不断优化哦&#xff09;2.贪吃蛇游戏的代码操作步骤/讲解&#xff1a;3.贪吃蛇游戏的详细代码 :3.1MPanel.java3.2 Msnake.java 4.贪吃蛇游戏的代码分享 (获得代码 和 其中游戏图片)5.(继…

总结react中css的使用

1、css in js css in js有很多库&#xff0c;这里介绍styled-components styled-components 下载【vscode可以安装vscode-styled-components 插件&#xff0c;有代码提示】 npm i styled-components 1、然后为某个组件新建style.js文件&#xff0c;然后写一些样式。 impo…