当前位置: 首页 > news >正文

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&#xff0c;使用trigger 1.2 在2个连续状态之间的转换&#xff0c;使用bool值切换转换 2 至少现在有2种角色的移动控制方式 2.1 用CharacterController 控制角色的移动 2.2 用animator…...

C++ ——构造函数

1、作用&#xff1a;创建对象时&#xff0c;给对象的属性进行初始化 2、特点 &#xff08;1&#xff09;构造函数与类同名 &#xff08;2&#xff09;如果没有显式给出构造函数&#xff0c;编译器会给出默认的构造函数&#xff08;参数为空&#xff0c;并且函数体也为空&#…...

Python实现语音识别详细教程【2025】最新教程

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python3 使用 pip 安装必要的库 二、使用 SpeechRecognition 库进行语音识别1.识别本地音频文件2.实时语音识别3. 使用其他语音识别引擎 注意事项 前言 以下是一份较为完整的 Python 语音识别教程&#xff0c;涵盖环境搭建、使…...

【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】

凌晨三点的自动驾驶测试场,AI系统突然在暴雨中做出惊人决策——它选择撞向隔离带而不是紧急变道,因为算法推演发现隔离带后的应急车道站着五个工程师。这个惊悚的伦理困境,揭开了深度学习伦理危机最尖锐的冰山一角。 一、潘多拉魔盒已开:深度学习伦理的四大原罪 1.1 数据原…...

Django中数据库迁移命令

在 Django 中&#xff0c;数据库迁移是确保数据库结构与 Django 模型定义保持一致的重要过程。以下是 Django 中常用的数据库迁移命令&#xff1a; 1. python manage.py makemigrations 功能&#xff1a;此命令用于根据 Django 项目的模型文件&#xff08;models.py&#xff…...

Win11 远程 连接 Ubuntu20.04(局域网)

Win11 远程 连接 Ubuntu20.04(局域网&#xff09; 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1&#xff1a;远程桌面连接(winr: mstsc)方式2&#xff1a;mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…...

安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)

进程分析注入综合工具总界面 模块分析函数分析遍历 函数分析 so汇编分析 汇编call植入器&#xff0c;支持模拟器x86 x64 和手机arm64指令全平台 防ce搜索数据功能 全国首套发布&#xff0c;阿凡老师学院最好的安卓内存逆向老师&#xff0c;几乎行业最强的&#xff0c;有兴趣可以…...

PPT工具集

PPT模版 免费下载 爱PPT优品PPTPPT之家第一PPTOfficePlus部分免费 AI生成PPT Kimi秘塔搜索 可以输入内容生成PPT大纲。...

SpringBoot:使用spring-boot-test对web应用做单元测试时如何测试Filter?

对SpringBoot的Web应用做单元测试时&#xff0c;一般会使用spring-boot-test&#xff0c;pom.xml中会添加如下内容&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><…...

解锁 Java 回调函数:异步编程与事件处理的利器

什么是 Java 回调函数 在 Java 中&#xff0c;回调函数是一种编程模式&#xff0c;允许将一个方法作为参数传递给另一个方法&#xff0c;当某个特定事件发生或某个任务完成时&#xff0c;调用该方法。回调机制可以使代码更加灵活和可扩展&#xff0c;因为它允许在运行时动态地…...

记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)

本文是记录PasteSpider的Windows.IIS开发过程, 在应用开发中,结果很重要,但是开发过程中遇到的问题和思考绝对是更有意义的事情! 经历过不同的需求后,你会发觉案例项目还真的只是案例项目,和实际项目天差地别!!! PasteSpider是开发者专属部署工具, 新版本的支持Windo…...

MySQL Workbench安装教程以及菜单汉化

WorkBench的下载 直接给下载MySql WorkBench的链接&#xff0c;直接进入正题&#xff1a;MySQL :: Download MySQL Workbenchhttps://dev.mysql.com/downloads/workbench/进入了下载界面&#xff1a; &#xff08;安装路径自己看着办&#xff0c;注意安装路径不能有中文&#…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析&#xff08;ClearDiagnosticInformation0x14服务&#xff09; 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月13日 关键词&#xff1a;UDS协议、0x14服务、DTC清除、ISO 14229-1:2023、ECU测试 一、服务功能…...

Python的imutils库详细介绍

imutils 是一个专为简化OpenCV&#xff08;计算机视觉库&#xff09;常见操作而设计的Python工具库&#xff0c;提供了一系列便捷函数&#xff0c;使图像和视频处理更加高效和简洁。以下是对其功能、安装及用法的详细介绍&#xff1a; 1. 安装方法 通过pip安装&#xff1a; p…...

常用查找算法整理(顺序查找、二分查找、插值查找、斐波那契查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)

常用的查找算法&#xff1a; 顺序查找&#xff1a;最简单的查找算法&#xff0c;适用于无序或数据量小的情况&#xff0c;逐个元素比较查找目标值。二分查找&#xff1a;要求数据有序&#xff0c;通过不断比较中间元素与目标值&#xff0c;将查找范围缩小一半&#xff0c;效率…...

2526考研资料分享 百度网盘

通过网盘分享的文件&#xff1a;01、2026【考研数学】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492mP3w?pwd98wg 提取码:98wg--来自百度网盘超级会员v3的分享 通过网盘分享的文件&#xff1a;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服务器的简单搭建&#xff0c;但是有很多问题我们并没有解决。 在前文中&#xff0c;我们的 get…...

东方财富股吧发帖与评论爬虫

东方财富股吧发帖与评论爬虫 东方财富股吧爬虫 写在开头项目介绍主要功能文件介绍爬取逻辑 a. 爬取帖子信息b. 爬取评论信息 使用步骤 1. 下载代码2. MongoDB 安装3. Webdriver 安装4. 运行 main.py5. 查看数据 踩过的坑附录&#xff08;运行结果&#xff09; 东方财富股吧爬…...

【Elasticsearch】match_bool_prefix查询

match_bool_prefix查询是 Elasticsearch 中一种用于全文搜索的查询方式&#xff0c;适用于需要同时匹配多个词汇&#xff0c;但词汇顺序不固定的情况&#xff0c;它结合了布尔查询&#xff08;bool&#xff09;和前缀查询&#xff08;prefix&#xff09;的功能&#xff0c;适用…...

微信小程序image组件mode属性详解

今天学习微信小程序开发的image组件&#xff0c;mode属性的属性值不少&#xff0c;一开始有点整不明白。后来从网上下载了一张图片&#xff0c;把每个属性都试验了一番&#xff0c;总算明白了。现总结归纳如下&#xff1a; 1.使用scaleToFill。这是mode的默认值&#xff0c;sc…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...