我正在 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,像这样,它根本不会跳得很高。
这是~0.16
这是~0.23
最低的跳跃使其 Y 值达到 ~0.7,但最高的跳跃使其达到 4.83 左右。
如果有人有任何想法,我将不胜感激。
白板的微信
慕雪6442864
相关分类