簡體   English   中英

Unity - 檢查播放器是否接地不起作用

[英]Unity - Checking if the player is grounded not working

我希望玩家在接地時跳躍。

private void OnTriggerStay(Collider other)
{
    if(other.gameObject.layer == 8)
    {
        isGrounded = true;
    }else { isGrounded = false; }
}

玩家在生成時處於直播狀態。 在玩家跌落到帶有Ground標簽的 Terrain 后, isGrounded仍然是假的。 當我手動將 isGrounded 設置為 true 並再次跳轉時,碰撞后仍然為 true。 我也不希望玩家在空中雙跳,我可能已經編碼但由於出現問題而無法正常工作。

OnTriggerStay更改為OnTriggerEnter不會改變某些內容。 我希望你能幫助我。

不要使用OnTriggerStay做到這一點。 這不能保證每次都是真的。

設置isGrounded標志設置為true時OnCollisionEnter被調用。 調用OnCollisionExit時將其設置為 false。

bool isGrounded = true;

private float jumpForce = 2f;
private Rigidbody pRigidBody;

void Start()
{
    pRigidBody = GetComponent<Rigidbody>();
}

private void Update()
{
    if (Input.GetButtonDown("Jump") && isGrounded)
    {
        pRigidBody.AddForce(new Vector3(0, jumpForce, 0));
    }
}

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Entered");
    if (collision.gameObject.CompareTag("Ground"))
    {
        isGrounded = true;
    }
}

void OnCollisionExit(Collision collision)
{
    Debug.Log("Exited");
    if (collision.gameObject.CompareTag("Ground"))
    {
        isGrounded = false;
    }
}

在你說它不起作用之前,請檢查以下內容:

  • 您必須將RigidbodyRigidbody2D附加到播放器。

  • 如果此Rigidbody2D ,則必須使用OnCollisionEnter2DOnCollisionExit2D

  • 您必須在禁用 IsTrigger 的情況下將碰撞器連接到播放器。

  • 確保您沒有使用諸如transform.positiontransform.Translate類的變換移動Rigidbody 你必須移動RigidbodyMovePosition功能。

使用它來檢查是否完全檢測到碰撞,這是進一步調試的良好起點:

private void OnTriggerStay(Collider other)
{
   Debug.Log(other);
}

您必須在禁用 IsTrigger 的情況下將碰撞器連接到播放器。

我想你的意思是啟用? 我一直在努力讓它工作,但是一旦我啟用了對撞機的 IsTrigger,它就開始實際工作。 OnTriggerEnter/Exit 在實際上不是觸發器的對撞機上似乎沒有太大作用......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM