unity中常见的角色控制方法

使用物理引擎(如 Rigidbody)来控制角色

using UnityEngine;public class PlayerController : MonoBehaviour
{public float moveSpeed = 5f;public float jumpForce = 5f;private Rigidbody rb;private bool isGrounded;void Start(){// 获取角色的 Rigidbody 组件rb = GetComponent<Rigidbody>();}void Update(){// 获取水平和垂直输入(键盘的方向键或 WASD)float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");// 创建一个新的 Vector3 来表示移动方向Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);// 应用移动速度rb.velocity = movement * moveSpeed;// 检测跳跃输入if (Input.GetKeyDown(KeyCode.Space) && isGrounded){// 应用跳跃力rb.AddForce(new Vector3(0, jumpForce, 0), ForceMode.Impulse);}}void OnCollisionStay(Collision collision){// 检测角色是否在地面上if (collision.gameObject.CompareTag("Ground")){isGrounded = true;}}void OnCollisionExit(Collision collision){// 检测角色是否离开地面if (collision.gameObject.CompareTag("Ground")){isGrounded = false;}}
}

使用角色控制器CharacterController 组件来控制角色

 

using UnityEngine;public class PlayerController : MonoBehaviour
{public float moveSpeed = 5f;public float jumpHeight = 1.5f;private CharacterController controller;private Vector3 playerVelocity;private bool groundedPlayer;void Start(){// 获取角色的 CharacterController 组件controller = GetComponent<CharacterController>();}void Update(){// 检测角色是否在地面上groundedPlayer = controller.isGrounded;if (groundedPlayer && playerVelocity.y < 0){playerVelocity.y = 0f;}// 获取水平和垂直输入(键盘的方向键或 WASD)float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");// 创建一个新的 Vector3 来表示移动方向Vector3 move = new Vector3(moveHorizontal, 0, moveVertical);controller.Move(move * Time.deltaTime * moveSpeed);// 改变角色面朝移动方向if (move != Vector3.zero){gameObject.transform.forward = move;}// 检测跳跃输入if (Input.GetButtonDown("Jump") && groundedPlayer){playerVelocity.y += Mathf.Sqrt(jumpHeight * -3.0f * Physics.gravity.y);}// 应用重力playerVelocity.y += Physics.gravity.y * Time.deltaTime;controller.Move(playerVelocity * Time.deltaTime);}
}

通过修改 Transform 组件的位置和旋转来控制角色

 

using UnityEngine;public class PlayerController : MonoBehaviour
{public float moveSpeed = 5f;public float rotationSpeed = 700f;public float jumpForce = 5f;private bool isGrounded;private Vector3 jump;void Start(){// 初始化跳跃向量jump = new Vector3(0.0f, jumpForce, 0.0f);}void Update(){// 获取水平和垂直输入(键盘的方向键或 WASD)float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");// 移动角色transform.Translate(new Vector3(moveHorizontal, 0, moveVertical) * moveSpeed * Time.deltaTime);// 旋转角色if (moveHorizontal != 0 || moveVertical != 0){Vector3 direction = new Vector3(moveHorizontal, 0, moveVertical);Quaternion rotation = Quaternion.LookRotation(direction, Vector3.up);transform.rotation = Quaternion.RotateTowards(transform.rotation, rotation, rotationSpeed * Time.deltaTime);}// 检测跳跃输入if (Input.GetKeyDown(KeyCode.Space) && isGrounded){GetComponent<Rigidbody>().AddForce(jump, ForceMode.Impulse);}}void OnCollisionStay(Collision collision){// 检测角色是否在地面上if (collision.gameObject.CompareTag("Ground")){isGrounded = true;}}void OnCollisionExit(Collision collision){// 检测角色是否离开地面if (collision.gameObject.CompareTag("Ground")){isGrounded = false;}}
}

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

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

相关文章

NVeloDocx一个基于NVelocity的word模版引擎

NVeloDocx是一个基于NVelocity的Word模版引擎&#xff0c;目前主要是用于E6低代码开发平台供用户轻松制作各种Word报告模版。 有以下优点&#xff1a; 1、完全的NVelocity语法&#xff1b; 2、直接在Word中写NVelocity脚本&#xff0c;使用非常非常方便&#xff1b; 3、完全兼…

SOA设计的标准要求

1.文档标准化 SOA服务具有平台独立的自我描述XML文档。Web服务描述语言是用于描述服务的标准语言。 2.通信协议标准 SOA服务用消息进行通信&#xff0c;该消息通常使用XML Schema来定义&#xff08;也称作XSD&#xff0c;XML Schema Definition&#xff09;。消费者和提供者&a…

数据集笔记:DGraph 大规模动态图数据集

dgraph-web (xinye.com) 1 数据集介绍 DGraph 是一个有向无权的动态图&#xff0c;包含超过 370 万个节点以及 430 万条动态边DGraph 中的节点表示金融借贷用户&#xff0c;有向边表示紧急联系人关系&#xff0c;每个节点包含脱敏后的属性特征&#xff0c;以及表示是否为金融…

C++ STL -算法

目录 前言: 一. sort() 二.find() 三. for_each() 四. size() 五.copy() 六. 总结 前言: STL 算法是基于模板实现的&#xff0c;可用于不同类型的容器。 意义和作用&#xff1a; 提高代码的可复用性和可维护性.减少代码量&#xff0c;提高开发效率.提供高效、可靠的实…

rapidjson 打包过程插入对象

开发过程中遇到一种情况&#xff0c;在打包过程中插入一个字符串&#xff08;里面是json对象&#xff09;&#xff0c; 官方文档 没看到相关例子&#xff0c;不知道是不是自己粗心没找到。方法RawValue其实是一个通用打包方法&#xff0c;一般情况我们都调用的是String()、Int(…

vb开源项目推荐:PhotoDemon9.0一键批量去除图片水印

PhotoDemon 9.0作为一款开源免费的照片编辑器&#xff0c;提供了丰富的图片编辑和处理功能&#xff0c;可以通过PhotoDemon的批处理功能结合一些编辑技巧&#xff0c;来实现批量去除图片水印的目的。 以下是一个可能的步骤指南&#xff0c;用于在PhotoDemon 9.0中通过批处理间…

【CS.CN】深入解析HTTP中的Expect: 100-continue头:性能优化的利器还是鸡肋?

目录 0 序言 0.1 由来0.2 使用场景0.3 现在还需要吗&#xff1f; 1 Expect: 100-continue的机制2 语法 && 通过重新设置空的Expect头优化性能3 实例分析&#xff1a;长连接中的Expect问题解决4 总结 0 序言 0.1 由来 Expect: 100-continue头部字段最早在HTTP/1.1规…

深入解析Kafka消息丢失的原因与解决方案

深入解析Kafka消息丢失的原因与解决方案 Apache Kafka是一种高吞吐量、分布式的消息系统&#xff0c;广泛应用于实时数据流处理。然而&#xff0c;在某些情况下&#xff0c;Kafka可能会出现消息丢失的情况&#xff0c;这对于数据敏感的应用来说是不可接受的。本文将深入解析Ka…

密文域可逆信息隐藏安全性研究-从图像到视频

前言 随着云存储、云计算等新兴技术的兴起&#xff0c;海量的隐私信息被广泛地上传、存储到服务器上。为保证用户的隐私性&#xff0c;必须对用户的数据进行加密&#xff0c;然后再将其上传到服务器上。因此&#xff0c;密文域的可逆信息隐藏(reversible data hiding in encry…

【QT】浅析Qt应用程序的主函数,Qt应用程序启动流程

int main(int argc, char *argv[]) {QApplication a(argc, argv);qRegisterMetaType<QList<TreeListStruct>>("QList<TreeListStruct>");//注册自定义类型 按你实际业务 可有可无MainWindow w;w.show();return a.exec(); }这段代码是一个典型的Qt应…

数字人AI唇音同步解决方案,轻量高效,灵活部署

在数字化浪潮的推动下&#xff0c;企业对于高效、逼真的数字人形象需求日益增强。为满足这一市场需求&#xff0c;美摄科技凭借其深厚的AI技术积累&#xff0c;推出了一款革命性的数字人AI唇音同步解决方案&#xff0c;为企业带来前所未有的沟通体验。 一、精准捕捉&#xff0…

使用vue3+ts封装一个Slider滑块组件

创建一个名为 Slider.vue 的文件 <template><div class"slider-container"><inputtype"range":value"value"input"handleInput"change"handleChange"/><div class"slider-value">{{ val…

泛化能力的理解

第一个解释&#xff1a; 大模型泛化能力简介 泛化&#xff08;Generalisation&#xff09;可以理解为一种迁移学习的能力&#xff0c;大致可以理解为把从过去的经验中学习到的表示、知识和策略应用到新的领域&#xff0c;是大模型最被需要的能力。 在NLP的上下文中&#xff0c;…

React Hooks路由传参

场景&#xff1a;如何把想要的参数带到跳转过去的页面里呢&#xff1f;很简单 上代码&#xff1a; 在你需要跳转的页面上 引入 Link用来跳转使用 Link跳转并携带参数 然后需要什么参数就带什么过去喽 这里record里面存的就是我的数据 我只需要id和state然后到你跳转过去的页面…

【Mtk Camera开发学习】06 MTK 和 Qcom 平台支持通过 Camera 标准API 打开 USBCamera

本专栏内容针对 “知识星球”成员免费&#xff0c;欢迎关注公众号&#xff1a;小驰行动派&#xff0c;加入知识星球。 #MTK Camera开发学习系列 #小驰私房菜 Google 官方介绍文档&#xff1a; https://source.android.google.cn/docs/core/camera/external-usb-cameras?hlzh-…

http和https数据传输与协议区分

目录 1. 数据传输安全性2. 端口号3. URL 前缀4. SSL/TLS 证书5. 性能6. SEO 和用户信任7. 应用场景总结 HTTP&#xff08;HyperText Transfer Protocol&#xff09;和 HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是用于在客户端&#xff08;如浏览器&…

【JavaScript】内置对象 - 字符串对象 ④ ( 根据索引位置返回字符串中的字符 | 代码示例 )

文章目录 一、根据索引位置返回字符串中的字符1、charAt 函数获取字符2、charCodeAt 函数获取字符 ASCII 码3、数组下标获取字符 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、根据索引位置返回…

十七、【源码】一级缓存

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/17-first-level-cache 一级缓存 MyBatis 的一级缓存用于减少在同一个 SqlSession 内的重复查询&#xff0c;适用于需要在单个会话内多次查…

Windows下对于Qt中带 / 的路径的处理

在Windows下&#xff0c;如果你想使用操作系统的分隔符显示用户的路径&#xff0c;请使用 toNativeSeparators()。 请看以下代码&#xff1a; void Player::on_playBtn_clicked() {if (this->m_url.isEmpty()) {openMedia();if (this->m_url.isEmpty())return;}qDebug(…

介绍单例模式

描述 保证一个类只有一个实例&#xff0c;并且提供一个全局访问点 场景&#xff1a; 重量级的对象&#xff0c;不需要多个实例&#xff0c;如线程池&#xff0c;数据库连接池 实现 1. 懒汉模式 延迟加载的方式 只有在真正使用的时候&#xff0c;才开始实例化线程安全问题…