【发布时间】:2018-08-31 09:34:39
【问题描述】:
我正在 Unity 中制作一款游戏,您可以在其中使用 WASD 和空间进行跳跃。这是我的代码:
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public Rigidbody rb;
public bool canJump;
void FixedUpdate () {
if (Input.GetKey("w"))
{
rb.AddForce(0, 0, 750 * Time.deltaTime, ForceMode.Acceleration);
}
if (Input.GetKey("a"))
{
rb.AddForce(-750 * Time.deltaTime, 0, 0, ForceMode.Acceleration);
}
if (Input.GetKey("s"))
{
rb.AddForce(0, 0, -750 * Time.deltaTime, ForceMode.Acceleration);
}
if (Input.GetKey("d"))
{
rb.AddForce(750 * Time.deltaTime, 0, 0, ForceMode.Acceleration);
}
if (canJump)
{
if (Input.GetKeyDown("space"))
{
rb.AddForce(0, 10, 0, ForceMode.VelocityChange);
Debug.Log("jump");
canJump = false;
}
}
Vector3 v = rb.velocity;
v.y = 0;
v = Vector3.ClampMagnitude(v, 6);
v.y = rb.velocity.y;
rb.velocity = v;
}
void OnCollisionEnter(Collision other)
{
if (other.gameObject.name == "Ground")
{
canJump = true;
}
}
void OnCollisionExit(Collision other)
{
if (other.gameObject.name == "Ground")
{
canJump = false;
}
}
}
但是,当我跳的时候,它有时会跳得很高,有时几乎没有跳。我已经测试了按住空格键是否有任何区别,但没有。我试过使用ForceMode.Impulse和ForceMode.VelocityChange,但是跳跃还是不一致。
我还注意到,玩家只有在地板上的 Y 值约为 ~0.23 时才会在空中跳得很高。也可以是~0.16,像这样,而且根本不会跳得很高。
最低跳跃使其 Y 值达到 ~0.7,但最高跳跃使其达到 4.83 左右。
如果有人有任何想法,我将非常感激。
【问题讨论】:
-
@AnLog 调试是什么意思?你的意思是在跳转语句中放Debug.Log("jump")?
-
抱歉,我确实在移动设备上玩弄了手脚并发表了不完整的评论。我认为您应该在跳转部分添加一条 Debug.Log("jump") 行,以查看它是否在开始时仍然与地面接触时实际上没有多次跳跃。
-
好的,这是一个聪明的主意。我会试试的。我确实看过互联网,它说在跳转语句的末尾添加 isGrounded = false ,所以我也会尝试。谢谢!编辑:我的代码中已经有 isGrounded = false ,所以我会更新问题中的代码。
-
@AnLog 好像只跳了一次。