当一个立方体在移动时,我如何使它能够';不要在空中跳

本文关键字:何使它 在空中 一个 立方体 移动 | 更新日期: 2023-09-27 18:00:03

我在场景中有一个立方体,当你按下其中一个箭头键时,它会向上并沿箭头键的方向移动。当立方体已经在空中时单击时,它会在返回地面之前再次跳跃。如何使立方体在回到地面之前不能再次跳跃?这是我迄今为止的代码:

  public class MovePlayer : MonoBehaviour { 
Vector3 endPos;
Vector3 startPos;

bool jumping = false;
// Update is called once per frame
void Update () {
    endPos = gameObject.transform.position;
    startPos = gameObject.transform.position;
        if (Input.GetButtonDown ("up") && gameObject.transform.position == endPos) {
            transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
            transform.Translate(Vector3.forward * 50 * Time.deltaTime, Space.World);
        }
    else if (Input.GetButtonDown ("down") && gameObject.transform.position == endPos) {
        transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
        transform.Translate(-Vector3.forward * 50 * Time.deltaTime, Space.World);
    }
    else if (Input.GetButtonDown ("left") && gameObject.transform.position == endPos) {
        transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
        transform.Translate(Vector3.left * 50 * Time.deltaTime, Space.World);
    }
    else if (Input.GetButtonDown ("right") && gameObject.transform.position == endPos) {
        transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
        transform.Translate(Vector3.right * 50 * Time.deltaTime, Space.World);
    }
}
}

当一个立方体在移动时,我如何使它能够';不要在空中跳

如果玩家与地面接触/碰撞,则将布尔jumping设为false。如果不是,那就让它成为现实。然后添加并用跳转输入条件检查它,这样true不会让跳转,false会让跳转。

为了探测地面,请使用以下代码。根据需要标记地面。玩家和地面都需要collider组件,其中至少一个需要连接Rigidbody组件。

void OnCollisionEnter (Collision other)
{
 if (other.collider.tag == "ground_tag")
{
 Jumping = false;
}
}
void OnCollisionExit (Collision other)
{
 if (other.collider.tag == "ground_tag")
{
 Jumping = true;
}
}

可以使用从角色脚部到地面的光线投射。如果射线击中了什么东西,你就在地上。

var origin = transform.position;
var onGround = Raycast(origin, Vector3.down, 1f);

请注意,您需要从脚投射光线,因此可能需要更改origin值。

这种方法很好,因为您可以使用层遮罩和许多其他选项。

相关文章: