[英]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.