【unity实战】利用Root Motion+Blend Tree+Input System+Cinemachine制作一个简单的角色控制器

本文主要是介绍【unity实战】利用Root Motion+Blend Tree+Input System+Cinemachine制作一个简单的角色控制器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 动画设置
  • Blend Tree配置
  • 角色添加刚体和碰撞体
  • 代码控制人物移动
  • 那么我们接下来调整一下相机的视角
  • 效果
  • 参考
  • 完结

前言

Input System知识参考:
【推荐100个unity插件之18】Unity 新版输入系统Input System的使用,看这篇就够了

Cinemachine虚拟相机知识参考:
【推荐100个unity插件之10】Unity最全的最详细的Cinemachine(虚拟相机系统)介绍,详细案例讲解,快速上手
【unity实战】Cinemachine虚拟相机实战,使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制

动画设置

在这里插入图片描述

在这里插入图片描述
移动和行走记得勾选循环
在这里插入图片描述

Blend Tree配置

我们做一个俯视角的一个角色控制器,我们自动计算一下他们的阈值
然后我们参考的是他们在Z方向的速度
在这里插入图片描述
效果
在这里插入图片描述
比如说我们现在希望行走的速度是1.5

使用1.5/1.6=0.94左右,得到他的播放速度
在这里插入图片描述
然后假设我们希望奔跑的速度是3.5,3.5/3.4=1.02左右
在这里插入图片描述
在这里插入图片描述

角色添加刚体和碰撞体

在这里插入图片描述

代码控制人物移动

using UnityEngine;
using UnityEngine.InputSystem;public class PlayerController : MonoBehaviour
{public Transform playerTransform; // 角色的 Transform 组件public float currentSpeed; // 当前速度public float targetSpeed; // 目标速度public float walkSpeed = 1.5f; // 行走速度public float runSpeed = 3.5f; // 跑步速度public float rotateSpeed = 700f; // 旋转速度(假设你要添加这个变量)private Animator animator; // 动画控制器private Vector2 playerInputVec; // 玩家输入向量private bool isRunning; // 是否正在跑步// Start 是在第一次帧更新之前调用void Start(){animator = GetComponent<Animator>(); // 获取 Animator 组件playerTransform = transform; // 初始化 playerTransform}// Update 每帧调用一次void Update(){RotatePlayer(); // 旋转角色MovePlayer(); // 移动角色}// 获取玩家移动输入public void GetPlayerMoveInput(InputAction.CallbackContext ctx){playerInputVec = ctx.ReadValue<Vector2>(); // 读取输入值Debug.Log(playerInputVec); // 打印输入向量}// 获取玩家跑步输入public void GetPlayerRunInput(InputAction.CallbackContext ctx){isRunning = ctx.ReadValue<float>() > 0; // 判断是否在跑步Debug.Log(isRunning); // 打印跑步状态}// 旋转角色void RotatePlayer(){if (playerInputVec.Equals(Vector2.zero))return; // 如果没有输入,返回Vector3 playerMovement = new Vector3(playerInputVec.x, 0, playerInputVec.y); // 根据输入向量计算移动方向Quaternion targetRotation = Quaternion.LookRotation(playerMovement, Vector3.up); // 计算目标旋转// 旋转角色playerTransform.rotation = Quaternion.RotateTowards(playerTransform.rotation, targetRotation, rotateSpeed * Time.deltaTime);}// 移动角色void MovePlayer(){targetSpeed = isRunning ? runSpeed : walkSpeed; // 设置目标速度targetSpeed *= playerInputVec.magnitude; // 根据输入的大小调整目标速度// 平滑过渡到目标速度currentSpeed = Mathf.Lerp(currentSpeed, targetSpeed, 0.5f);// 设置动画参数animator.SetFloat("Vertical Speed", currentSpeed);}
}

那么我们接下来调整一下相机的视角

在这里插入图片描述
就是就是这个这个foow指的是相机的移动是跟随着那个目标的
然后这个look at的曲子是相机要追着哪一就是游戏对象去进行旋转
然后我们这里我们这里可能不需要旋转,把Aim改为Hard Look At

把Aim改为Hard Look At
把M这里写的就是盯着他看
不做任何的其他的行为

改为世界坐标模式,并修改对应的相机位置,比如高度等
X Damping
Y Damping
Z Damping
控制跟随延迟,我们不希望他延迟,都设置为0
在这里插入图片描述

效果

在这里插入图片描述

参考

https://www.bilibili.com/video/BV1Ur4y1b7ff

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

这篇关于【unity实战】利用Root Motion+Blend Tree+Input System+Cinemachine制作一个简单的角色控制器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139680

相关文章

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

input的accept属性让文件上传安全高效

《input的accept属性让文件上传安全高效》文章介绍了HTML的input文件上传`accept`属性在文件上传校验中的重要性和优势,通过使用`accept`属性,可以减少前端JavaScrip... 目录前言那个悄悄毁掉你上传体验的“常见写法”改变一切的 html 小特性:accept真正的魔法:让

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什