【Unity】使用Cinemachine+CharacterController实现第三人称视角下的角色视角、移动和跳跃控制

1.初始配置

  • 安装Cinemachine插件
  • 给角色添加CharacterConroller
  • 创建Cinemachine-->Free Look Camera
  • 在Free Look Camera中调整参数,Y Axis勾选Inver,X Axis取消勾选Inver
  • Free Look Camera要看向角色 + 跟随角色(自行设置,我就不再赘述了)

2.编写C#脚本

代码可以自行收藏直接用,关键自行调整的参数是:

speed、rotateSpeed、jumpHeight

using UnityEngine;public class PlayerController : MonoBehaviour
{[Header("参数")] public float speed; //角色移动速度(跑步的时候是两倍)public float rotateSpeed; //角色转向速度public float playerGravity = 9.8F; //角色重力public float jumpForce; //跳跃力度public float jumpHeight = 2F; //跳跃高度public float verticalVelocity = 0;//垂直速度[Header("状态")] public bool isMove; //是否在移动public bool isRun; //是否在跑步[Header("输入")]public Vector3 inputDirection; //wasd输入(x值表示horizontal,z值表示vertical,y值为0)[Header("组件")]public CharacterController characterController; //这个在Start函数中初始化,你也可以在Inspector初始化private void Start(){inputDirection = new Vector3();characterController = GetComponent<CharacterController>();}private void Update(){//计算WASD输入inputDirection.x = Input.GetAxisRaw("Horizontal");inputDirection.z = Input.GetAxisRaw("Vertical");//获得是否是移动和跑步状态isMove = inputDirection.magnitude > 0;isRun = isMove && Input.GetKey(KeyCode.LeftShift);//光标的可见性设置if (Input.GetKeyDown(KeyCode.I)){Cursor.visible = !Cursor.visible;}if (Input.GetKeyDown(KeyCode.Space)){characterController.SimpleMove(transform.up * jumpForce);}if (!isMove) return;//实现角色转向到相机平行于xz轴构成的平面的朝向Vector3 targetDirection = new Vector3(inputDirection.x, 0, inputDirection.z);float y = Camera.main.transform.rotation.eulerAngles.y;Quaternion targetRotation = Quaternion.Euler(0, y, 0) * Quaternion.LookRotation(targetDirection);// 使用Quaternion.Slerp进行平滑转向transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotateSpeed);}private void FixedUpdate(){Vector3 moveDirection = Vector3.zero;moveDirection += transform.forward * inputDirection.z;moveDirection += transform.right * inputDirection.x;moveDirection *= Time.fixedDeltaTime * (isRun ? speed*2 : speed);// 重力if (!characterController.isGrounded)verticalVelocity -= playerGravity * Time.fixedDeltaTime;// a*t=velseverticalVelocity = 0.0F;// 跳跃if (Input.GetButton("Jump")){// 得在地面才能跳if (characterController.isGrounded){verticalVelocity = Mathf.Sqrt(jumpHeight * 2 / playerGravity) * playerGravity;// 初始向上速度}}moveDirection.y += verticalVelocity * Time.fixedDeltaTime;// v*t=s// 移动characterController.Move(moveDirection);}
}

3.测试效果

测试运行效果,看看是否正常

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

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

相关文章

深入理解 DML 和 DQL:SQL 数据操作与查询全解析

深入理解 DML 和 DQL&#xff1a;SQL 数据操作与查询全解析 在数据库管理中&#xff0c;SQL&#xff08;结构化查询语言&#xff09;是操作和查询数据的核心工具。其中&#xff0c;DML&#xff08;Data Manipulation Language&#xff0c;数据操作语言&#xff09; 和 DQL&…

MongoDB数据库的安装到入门使用详细讲解

本篇文章主要讲解MongoDB的安装使用教程及基础的数据库管理和操作能力的讲解,通过本篇文章您可以快速的掌握对MongDB数据库的基本认识及,基础开发能力。 一、MongoDB介绍 MongoDB是一款免费开源的非关系型数据库,该数据库适应于复杂关系的存储和管理,非常适合数据结构复杂…

git提交实现文件或目录忽略

前言 开发中使用git下载项目代码开发,存在不需要提交文件或目录&#xff0c;这里记录下ideajava项目开发添加以下配置可忽略不需要提交文件,以方便我们提交代码时&#xff0c;查看及提交文件只涉及项目代码修改文件。 git提交实现文件或目录忽略 .gitignore 文件的内容列出了在…

go语言的八股文

1.go语言触发异常的场景有哪些 运行时错误 1.空指针解引用&#xff1a;尝试访问一个未初始化的指针指向的内存&#xff0c;会导致程序崩溃并触发异常。 2.数组越界访问&#xff1a;试图访问数组中不存在的索引&#xff0c;比如数组长度为5&#xff0c;却尝试访问索引为10的元素…

Ubuntu安装MySQL步骤及注意事项

一、安装前准备 1. 系统更新&#xff1a;在安装 MySQL 之前&#xff0c;确保你的 Ubuntu 系统软件包是最新的&#xff0c;这能避免因软件包版本问题导致的安装错误&#xff0c;并获取最新的安全补丁。打开终端&#xff0c;执行以下两条命令&#xff1a; sudo apt update sudo …

【愚公系列】《Python网络爬虫从入门到精通》054-Scrapy 文件下载

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

2025最新︱中国信通院静态应用程序安全测试(SAST)工具能力评估,悬镜安全灵脉AI通过评估!

背景 研发运营安全&#xff08;DevSecOps&#xff09;从研发运营&#xff08;DevOps&#xff09;的概念延伸和演变而来&#xff0c;其核心理念是将安全贯穿从开发到运营的软件开发生命周期的每一个环节&#xff0c;在每个阶段自动实施安全措施&#xff0c;从而实现快速开发交付…

辛格迪客户案例 | 浙江高跖医药委托生产质量管理协同(OWL MAH)项目

一、案例概述 浙江高跖医药科技股份有限公司是一家集“研、产、销”为一体的专业化药品持证企业。高跖医药自成立之初就建立并运行着一套相对完善的质量管理体系&#xff0c;涵盖了药品的研发、生产监管及销售。高跖医药于2022年选择实施了辛格迪的“委托生产质量管理协同解决…

【NLP 65、实践 ⑯ 基于Agent优化文章】

羁绊由我而起&#xff0c;痛苦也由我承担 —— 25.4.18 一、⭐【核心函数】定义大模型调用函数 call_large_model prompt&#xff1a;用户传入的提示词&#xff08;如 “请分析这篇作文的主题”&#xff09;&#xff0c;指导模型执行任务 client&#xff1a;Zhipu…

【锂电池SOH估计】BP神经网络锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)

目录 效果一览程序获取程序内容研究内容基于BP神经网络的锂电池健康状态估计研究摘要关键词1. 引言1.1 研究背景1.2 研究意义1.3 研究目标2. 文献综述2.1 锂电池SOH估计理论基础2.2 传统SOH估计方法2.3 基于BP神经网络的SOH估计研究进展2.4 研究空白与创新点3. BP神经网络原理3…

2025第十六届蓝桥杯python B组满分题解(详细)

目录 前言 A: 攻击次数 解题思路&#xff1a; 代码&#xff1a; B: 最长字符串 解题思路&#xff1a; 代码&#xff1a; C: LQ图形 解题思路&#xff1a; 代码&#xff1a; D: 最多次数 解题思路&#xff1a; 代码&#xff1a; E: A * B Problem 解题思路&…

第十二节:原理深挖-React Fiber架构核心思想

链表结构、时间切片&#xff08;Time Slicing&#xff09; 优先级调度实现&#xff08;如用户输入>网络请求&#xff09; React Fiber架构深度解析&#xff1a;从链表到优先级调度的革命性升级 一、Fiber架构核心设计思想 React Fiber是React 16的底层协调算法重构&#x…

你学会了些什么211201?--http基础知识

概念 HTTP–Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff1b;是一种建立在TCP上的无状态连接&#xff08;短连接&#xff09;。 整个基本的工作流程是&#xff1a;客户端发送一个HTTP请求&#xff08;Request &#xff09;&#xff0c;这个请求说明了客户端…

MCU开发学习记录8 - 基本定时器学习与实践(HAL库) - 定时器DMA循环模式修改ARR值、定时器中断方式修改ARR值 - STM32CubeMX

名词解释&#xff1a; TRGO&#xff1a;Trigger Out General Purpose Output ARR&#xff1a;Auto-reload PSC&#xff1a;Prescaler CNT&#xff1a;Counter EGR&#xff1a;event generation register 本文将介绍基本定时器的概念、相关函数以及STM32CubeMX生成定时器的配置…

考研系列-计算机网络冲刺考点汇总(上)

写在前面 本文将总结王道408考研课程的计算机网络冲刺考点的第一章到第三章内容&#xff08;计算机网络体系结构、物理层、数据链路层&#xff09;。【图片较多&#xff0c;加载需要时间&#xff0c;可以提前打开加载~~】 第一章、计算机网络体系结构 注意&#xff1a;PCI(头部…

设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 13&#xff1a;桥接模式小结 在 Day 13 中&#xff0c;我们学习了桥接模式&#xff08;Bridge Pattern&#xff09;&#xff1a; 用于将“抽象”与“实现”分离&#xff0c;适用于双维度变化场景&#xff08;如图形类型 渲染方式&#xff09;。它强调…

讯联桌面TV版apk下载-讯联桌面安卓电视版免费下载安装教程

在智能电视的使用过程中&#xff0c;一款好用的桌面应用能极大提升我们的使用体验。讯联桌面 TV 版就是这样一款备受关注的应用&#xff0c;它可以让安卓电视拥有更个性化、便捷的操作界面。今天&#xff0c;就为大家详细介绍讯联桌面 TV 版 apk 的免费下载安装教程。 一、下载…

Nginx知识点

Nginx发展历史 Nginx 是由俄罗斯程序员 Igor Sysoev 开发的高性能开源 Web 服务器、反向代理服务器和负载均衡器 &#xff0c;其历史如下&#xff1a; 起源与早期开发&#xff08;2002 - 2004 年&#xff09; 2002 年&#xff0c;当时 Igor Sysoev 在为俄罗斯门户网站 Rambl…

uview1.0 tabs组件放到u-popup中在微信小程序中滑块样式错乱

解决思路 重新计算布局信息&#xff1a;在弹窗显示后重新调用 init 方法来计算组件的布局信息。使用 nextTick&#xff1a;保证在视图更新之后再进行布局信息的计算。 <u-tabs ref"tabsRef" ></u-tabs> makeClick(){this.makeShowtruethis.$nextTick…

腾讯一面-软件开发实习-PC客户端开发方向

1.自我介绍就不多赘述了 2. 请介绍一下你的项目经历 - 介绍了专辑鉴赏项目&#xff0c;前端使用html语言编写&#xff0c;后端基于http协议使用C语言进行网页开发。此外&#xff0c;还提及项目中涉及处理多线程问题以及做过内存池管理项目。 3. 项目中HTTP协议是使用库实现的…