[英]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;
}
}
在你說它不起作用之前,請檢查以下內容:
您必須將Rigidbody
或Rigidbody2D
附加到播放器。
如果此Rigidbody2D
,則必須使用OnCollisionEnter2D
和OnCollisionExit2D
。
您必須在禁用 IsTrigger 的情況下將碰撞器連接到播放器。
確保您沒有使用諸如transform.position
和transform.Translate
類的變換移動Rigidbody
。 你必須移動Rigidbody
與MovePosition
功能。
使用它來檢查是否完全檢測到碰撞,這是進一步調試的良好起點:
private void OnTriggerStay(Collider other)
{
Debug.Log(other);
}
您必須在禁用 IsTrigger 的情況下將碰撞器連接到播放器。
我想你的意思是啟用? 我一直在努力讓它工作,但是一旦我啟用了對撞機的 IsTrigger,它就開始實際工作。 OnTriggerEnter/Exit 在實際上不是觸發器的對撞機上似乎沒有太大作用......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.