unity学习39:连续动作之间的切换,用按键控制角色的移动
目录
1 不同状态之间的切换模式
1.1 在1个连续状态和一个连续状态之间的transition,使用trigger
1.2 在2个连续状态之间的转换,使用bool值切换转换
2 至少现在有2种角色的移动控制方式
2.1 用CharacterController 控制角色的移动
2.2 用animator1 控制角色移动
2.3 共同特点, WASD键盘控制可以通过这2个轴形成的向量的方法实现
3 代码控制移动动画的播放
3.1 检测WASD移动,用轴向量的代码实现
3.2 按键改变面向
3.3 播放动画
3.4 移动
3.5 Animator的设置
3.5.1 动作状态的设置
3.5.2 设置好新的参数
3.5 完整代码
3.6 小心难缠的BUG
1 不同状态之间的切换模式
- 1个连续状态和一个连续状态之间的transition,使用trigger触发那个一次性状态即可
- 2个连续状态之间的转换,使用bool值,在2个连续状态之间进行转换
1.1 在1个连续状态和一个连续状态之间的transition,使用trigger
- 不勾选wave参数时,始终执行run
- 勾选了wave参数时,相当于满足了一次 wave的trigger触发条件
- 可以看到会执行一次wave动作
- 使用trigger来触发单次的动作

1.2 在2个连续状态之间的转换,使用bool值切换转换
- 2个连续状态之间的转换
- 因为2个状态都是连续的,所以任何一个状态都能持续
- 使用bool值,在2个连续状态之间进行转换

2 至少现在有2种角色的移动控制方式
- 角色控制器 CharacterController
- 控制角色的移动动画 Animator
2.1 用CharacterController 控制角色的移动
- 需要角色上有CharacterController 的component
private CharacterController player1;
player1=GetComponent<CharacterController>();
void Update()
{
//水平轴
float horizontal=Input.GetAxis("Horizontal");
//垂直轴
float vertical=Input.GetAxis("Vertical");
//创建成一个方向向量
Vector3 dir1=new Vector3(horizontal,0,vertical);
Debug.DrawRay(transform.position,dir1,Color.red);
//
player1.SimpleMove(dir1);
//player1.transform.Translate(dir1*2.0f*Time.deltaTime);
player1.Move(dir1*moveSpeed*Time.deltaTime);
}
}
2.2 用animator1 控制角色移动
- 需要角色上有animator的component
- animator 吧动画state设置好
- 且角色模型有不同的动作

private Animator animator1;
animator1=GetComponent<Animator>();void Update()
{
float horzontal=Input.GetAxis("Horizontal");
float vetical=Input.GetAxis("Vertical");
Vector3 dir1=new Vector3(horzontal,0,vetical);
Debug.DrawRay(transform.position,dir1,Color.red);
//如果按下了移动按键
if(dir1 != Vector3.zero)
{
//面向向量
transform.rotation=Quaternion.LookRotation(dir1);
//播放跑步动画
animator1.SetBool("IsRun",true);
//朝着面向的前方移动
//transform.Translate(Vector3.forward*2*Time.deltaTime);
2.3 共同特点, WASD键盘控制可以通过这2个轴形成的向量的方法实现
float horzontal=Input.GetAxis("Horizontal");
float vetical=Input.GetAxis("Vertical");
Vector3 dir1=new Vector3(horzontal,0,vetical);
3 代码控制移动动画的播放
3.1 检测WASD移动,用轴向量的代码实现
float horzontal=Input.GetAxis("Horizontal");
float vetical=Input.GetAxis("Vertical");
Vector3 dir1=new Vector3(horzontal,0,vetical);
3.2 按键改变面向
- 可以实现原地播放动画
//面向向量
transform.rotation=Quaternion.LookRotation(dir1);//可以实现原地播放动画
3.3 播放动画
//播放跑步动画
animator1.SetBool("IsRun",true);//播放walk动画
animator1.SetBool("IsRun",false);
3.4 移动
//朝着面向的前方移动
//transform.Translate(Vector3.forward*2*Time.deltaTime);
3.5 Animator的设置
3.5.1 动作状态的设置

3.5.2 设置好新的参数
- entry接着默认状态是walk
- 新增参数IsRun
- IsRun,用来切换walk和RUN
- wave参数继续控制WAVE动作

3.5 完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestPlayer1 : MonoBehaviour
{private Animator animator1;// Start is called before the first frame updatevoid Start(){animator1=GetComponent<Animator>();}// Update is called once per framevoid Update(){float horzontal=Input.GetAxis("Horizontal");float vetical=Input.GetAxis("Vertical");Vector3 dir1=new Vector3(horzontal,0,vetical);Debug.DrawRay(transform.position,dir1,Color.red);//如果按下了移动按键if(dir1 != Vector3.zero){//面向向量transform.rotation=Quaternion.LookRotation(dir1);//播放跑步动画animator1.SetBool("IsRun",true);//朝着面向的前方移动transform.Translate(Vector3.forward*2*Time.deltaTime);}else{//播放walk动画animator1.SetBool("IsRun",false);}if(Input.GetKeyDown(KeyCode.Q)){//触发wave参数GetComponent<Animator>().SetTrigger("wave");}}
}
实测OK

3.6 小心难缠的BUG
- 不要把轴名字写错
- 否则怎么也无法移动,但是很难定位错误
- float vetical=Input.GetAxis("Vetical"); //错误的轴,但是不给你报错,大概时因为轴可以自定义名称吧
- float vetical=Input.GetAxis("Vertical"); //正确的轴
相关文章:
unity学习39:连续动作之间的切换,用按键控制角色的移动
目录 1 不同状态之间的切换模式 1.1 在1个连续状态和一个连续状态之间的transition,使用trigger 1.2 在2个连续状态之间的转换,使用bool值切换转换 2 至少现在有2种角色的移动控制方式 2.1 用CharacterController 控制角色的移动 2.2 用animator…...
C++ ——构造函数
1、作用:创建对象时,给对象的属性进行初始化 2、特点 (1)构造函数与类同名 (2)如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空&#…...
Python实现语音识别详细教程【2025】最新教程
文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python3 使用 pip 安装必要的库 二、使用 SpeechRecognition 库进行语音识别1.识别本地音频文件2.实时语音识别3. 使用其他语音识别引擎 注意事项 前言 以下是一份较为完整的 Python 语音识别教程,涵盖环境搭建、使…...
【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】
凌晨三点的自动驾驶测试场,AI系统突然在暴雨中做出惊人决策——它选择撞向隔离带而不是紧急变道,因为算法推演发现隔离带后的应急车道站着五个工程师。这个惊悚的伦理困境,揭开了深度学习伦理危机最尖锐的冰山一角。 一、潘多拉魔盒已开:深度学习伦理的四大原罪 1.1 数据原…...
Django中数据库迁移命令
在 Django 中,数据库迁移是确保数据库结构与 Django 模型定义保持一致的重要过程。以下是 Django 中常用的数据库迁移命令: 1. python manage.py makemigrations 功能:此命令用于根据 Django 项目的模型文件(models.pyÿ…...
Win11 远程 连接 Ubuntu20.04(局域网)
Win11 远程 连接 Ubuntu20.04(局域网) 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1:远程桌面连接(winr: mstsc)方式2:mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…...
安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)
进程分析注入综合工具总界面 模块分析函数分析遍历 函数分析 so汇编分析 汇编call植入器,支持模拟器x86 x64 和手机arm64指令全平台 防ce搜索数据功能 全国首套发布,阿凡老师学院最好的安卓内存逆向老师,几乎行业最强的,有兴趣可以…...
PPT工具集
PPT模版 免费下载 爱PPT优品PPTPPT之家第一PPTOfficePlus部分免费 AI生成PPT Kimi秘塔搜索 可以输入内容生成PPT大纲。...
SpringBoot:使用spring-boot-test对web应用做单元测试时如何测试Filter?
对SpringBoot的Web应用做单元测试时,一般会使用spring-boot-test,pom.xml中会添加如下内容: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><…...
解锁 Java 回调函数:异步编程与事件处理的利器
什么是 Java 回调函数 在 Java 中,回调函数是一种编程模式,允许将一个方法作为参数传递给另一个方法,当某个特定事件发生或某个任务完成时,调用该方法。回调机制可以使代码更加灵活和可扩展,因为它允许在运行时动态地…...
记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)
本文是记录PasteSpider的Windows.IIS开发过程, 在应用开发中,结果很重要,但是开发过程中遇到的问题和思考绝对是更有意义的事情! 经历过不同的需求后,你会发觉案例项目还真的只是案例项目,和实际项目天差地别!!! PasteSpider是开发者专属部署工具, 新版本的支持Windo…...
MySQL Workbench安装教程以及菜单汉化
WorkBench的下载 直接给下载MySql WorkBench的链接,直接进入正题:MySQL :: Download MySQL Workbenchhttps://dev.mysql.com/downloads/workbench/进入了下载界面: (安装路径自己看着办,注意安装路径不能有中文&#…...
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(ClearDiagnosticInformation0x14服务) 作者:车端域控测试工程师 更新日期:2025年02月13日 关键词:UDS协议、0x14服务、DTC清除、ISO 14229-1:2023、ECU测试 一、服务功能…...
Python的imutils库详细介绍
imutils 是一个专为简化OpenCV(计算机视觉库)常见操作而设计的Python工具库,提供了一系列便捷函数,使图像和视频处理更加高效和简洁。以下是对其功能、安装及用法的详细介绍: 1. 安装方法 通过pip安装: p…...
常用查找算法整理(顺序查找、二分查找、插值查找、斐波那契查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)
常用的查找算法: 顺序查找:最简单的查找算法,适用于无序或数据量小的情况,逐个元素比较查找目标值。二分查找:要求数据有序,通过不断比较中间元素与目标值,将查找范围缩小一半,效率…...
2526考研资料分享 百度网盘
通过网盘分享的文件:01、2026【考研数学】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492mP3w?pwd98wg 提取码:98wg--来自百度网盘超级会员v3的分享 通过网盘分享的文件:01、2026【考研政治】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492…...
网络编程(24)——实现带参数的http-get请求
文章目录 二十四、day241. char 转为16进制2. 16进制转为 char3. URL 编码函数4. URL 解码函数5. 实现 get 请求参数的解析6. 测试 二十四、day24 我们在前文通过beast实现了http服务器的简单搭建,但是有很多问题我们并没有解决。 在前文中,我们的 get…...
东方财富股吧发帖与评论爬虫
东方财富股吧发帖与评论爬虫 东方财富股吧爬虫 写在开头项目介绍主要功能文件介绍爬取逻辑 a. 爬取帖子信息b. 爬取评论信息 使用步骤 1. 下载代码2. MongoDB 安装3. Webdriver 安装4. 运行 main.py5. 查看数据 踩过的坑附录(运行结果) 东方财富股吧爬…...
【Elasticsearch】match_bool_prefix查询
match_bool_prefix查询是 Elasticsearch 中一种用于全文搜索的查询方式,适用于需要同时匹配多个词汇,但词汇顺序不固定的情况,它结合了布尔查询(bool)和前缀查询(prefix)的功能,适用…...
微信小程序image组件mode属性详解
今天学习微信小程序开发的image组件,mode属性的属性值不少,一开始有点整不明白。后来从网上下载了一张图片,把每个属性都试验了一番,总算明白了。现总结归纳如下: 1.使用scaleToFill。这是mode的默认值,sc…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
