unity3d - CharacterController 统一跳转
问题描述
您好,我正在尝试在 Unity 中制作移动脚本。我也想添加跳跃,但是每次当我跳跃时,它都会在 Y 方向上向上移动 0.025 并将玩家停在空中*(如果我在 0 并且我跳跃它会在 0.02545 然后 0.0543 等...)* 和我可以向 Space 发送垃圾邮件以将玩家向上移动。我添加了重力,但它看起来不起作用..我不知道如何解决它。我希望有人可以帮助我解决我的问题...
这是我正在使用的功能...
Vector3 moveDirection = Vector3.zero;
public float walkingSpeed = 10.0f;
public bool canJump = true;
public float jumpSpeed = 8.0f;
public float gravity = 10.0f;
CharacterController characterController;
void Movement()
{
Vector3 forward = transform.TransformDirection(Vector3.forward);
Vector3 right = transform.TransformDirection(Vector3.right);
float moveX = walkingSpeed * Input.GetAxis("Vertical");
float moveY = walkingSpeed * Input.GetAxis("Horizontal");
float MovementY = moveDirection.y;
moveDirection = (forward * moveX) + (right * moveY);
if (Input.GetButtonDown("Jump") && canJump)
{
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
characterController.Move(moveDirection * Time.deltaTime);
}
解决方案
因为您正在重置moveDirection
每一帧(当您调用时,moveDirection = (forward * moveX) + (right * moveY)
您不会让重力累积。您应该单独保存垂直速度并在每一帧添加它。
类似于以下内容:
Vector3 moveDirection = Vector3.zero;
public float walkingSpeed = 10.0f;
public bool canJump = true;
public float jumpSpeed = 8.0f;
public float gravity = 10.0f;
CharacterController characterController;
private float verticalSpeed;
void Movement()
{
float moveX = walkingSpeed * Input.GetAxis("Vertical");
float moveY = walkingSpeed * Input.GetAxis("Horizontal");
verticalSpeed -= gravity * Time.deltaTime;
if (Input.GetButtonDown("Jump") && canJump)
{
verticalSpeed = jumpSpeed;
}
characterController.Move((moveX * transform.forward + moveY * transform.right + verticalSpeed * transform.up)
* Time.deltaTime);
}
transform.forward
相当于transform.TransformDirection(Vector3.forward)
推荐阅读
- python - Python中可以向ThreadPoolExecutor提交多少个任务
- smartcard - 香港ID芯片命令和响应APDU
- reload - 重新加载后丢失用户和页面数据
- html - 如何修复引导导航栏不打开下拉菜单?
- c# - 克服 OS 强加的 WPF 窗口 MinWidth 限制
- php - 具有多个子查询的查询生成器
- mysql - 如何在一个查询中删除和插入mysql
- javascript - 如何在 javascipt 中使用 mocha 断言验证文件下载
- javascript - SearchParam 编码和 URLencoding
- python - 为什么我的 python 类变量(例如 Post)不能在类中用于声明变量。- django