如何使用C#避免Unity中MidAir跳转

时间:2019-01-17 20:53:02

标签: c# unity3d

我想创建一个跳跃脚本,到目前为止,问题是我不希望gameObject在空中跳跃

我尝试将OnCollisionStay / Enter与OnCollisionExit结合使用以生成一个布尔值,该布尔值在跳入前与Input一起检查,这是最好的方法,但是缺少触发器的统一性

我无法使用gameObject.transform.position.y检查位置,因为我的平台有所不同。

isGrounded使用不同的代码,但会干扰我的其他动作(由Input上的AddForce实现)

我无法确定为什么此代码不起作用,我希望有人能帮助我理解。

using UnityEngine
public class PlayerMovement : MonoBehaviour
{
    private CharacterController controller;
    public Rigidbody rb;
    public Transform PPos; 
    public float jumpForce = 10f;
}
    public void Update()
{

    if(controller.isGrounded && Input.GetKeyDown(KeyCode.Space))
    {
      rb.AddForce(0, jumpForce, 0);
      Debug.Log("Jump Executed");
    }
}

我没有语法错误

1 个答案:

答案 0 :(得分:0)

编辑

只要角色有跳跃的能力,就需要设置controller.isGrounded

PlayerScript

void OnCollisionEnter(collision other)
{
    controller.isGrounded = other.gameObject.CompareTag("Ground");
}

原始

如果您想跳到半空中,则必须删除角色控制器在地面上的条件。

if(Input.GetKeyDown(KeyCode.Space))