Unity – 检查播放器是否接地不工作
我希望玩家在玩家停飞时跳跃。
private void OnTriggerStay(Collider other) { if(other.gameObject.layer == 8) { isGrounded = true; }else { isGrounded = false; } }
产卵时,播放器播出。 在玩家跌落到具有标记Ground
的Terrain之后, isGrounded
仍然是假的。 当我手动设置isGrounded并再次跳转时,它在碰撞后仍然是真的。 我也不希望玩家在空中双跳,我可能已编码但由于出了问题而无法正常工作。
将OnTriggerStay
更改为OnTriggerEnter
不会更改某些内容。 我希望你能帮助我。
不要使用OnTriggerStay
来执行此操作。 这不能保证是真实的。
调用OnCollisionEnter时,将isGrounded标志设置为true。 调用OnCollisionExit
时将其设置为false。
bool isGrounded = true; private float jumpForce = 2f; private Rigidbody pRigidBody; void Start() { pRigidBody = GetComponent(); } 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的情况下将Collider连接到播放器。
-
确保您没有使用
transform.position
和transform.Translate
等transform.position
移动Rigidbody
。 您必须使用MovePosition
函数移动Rigidbody
。
使用它来检查是否检测到碰撞,这是进一步调试的良好起点:
private void OnTriggerStay(Collider other) { Debug.Log(other); }