c# - Unity C# - 跳跃时移动角色
问题描述
我的角色动作很好,跳得很好。但是在跳跃时,他只是朝着他来的方向直线移动,在空中你不能旋转或移动他。怎么可能呢?
从更新功能:
if (controller.isGrounded)
{
moveD = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
moveD = transform.TransformDirection(moveD.normalized) * speed;
moveDA = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
if (moveDA.magnitude > 0)
{
gameObject.transform.GetChild(0).LookAt(gameObject.transform.position + moveDA, Vector3.up);
}
if (Input.GetButton("Jump"))
{
moveD.y = jumpSpeed;
}
}
moveD.y = moveD.y - (gravity * Time.deltaTime);
controller.Move(moveD * Time.deltaTime);
解决方案
controller.isGrounded
仅当您最后一次调用controller.Move()
对象对撞机的底部接触到一个表面时才如此,因此在您的情况下,一旦您跳跃,您将无法移动,直到再次撞到地面。
你可以通过分离你的运动代码和跳跃代码来解决这个问题,如下所示:
moveD = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
moveD = transform.TransformDirection(moveD.normalized) * speed;
moveDA = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
if (moveDA.magnitude > 0)
{
gameObject.transform.GetChild(0).LookAt(gameObject.transform.position + moveDA, Vector3.up);
}
if (controller.isGrounded)
{
if (Input.GetButton("Jump"))
{
moveD.y = jumpSpeed;
}
}
moveD.y = moveD.y - (gravity * Time.deltaTime);
controller.Move(moveD * Time.deltaTime);
推荐阅读
- liquid - 有没有办法查看液滴上的所有手柄?
- c++ - 实现一个 C++20 概念
- javascript - 如何通过这些对象的两个属性过滤对象数组?
- nuxt.js - 将 GTM 与 Nuxt 路由更改配合
- python - 在当前解决方案(或项目)中打开 Python REPL 或在路径中使用 Python 打开 cmd 提示符:VStudio with Python
- r - 创建一个新列,其值为 1 表示每个组中的前 x 值,0 表示组中的其余值
- python - Django - 我可以使用模板标签来呈现给定 URL 路径条件的 HTML 吗?
- javascript - 在 Devtools 中编辑网站的 Javascript/源文件 - 不更新
- mfc - 如何激活位于禁用窗口 (CWnd) 中的按钮 (CButton)?
- python - 基于数据框中的一列列表创建标志