我希望玩家在接地时跳跃。
private void OnTriggerStay(Collider other)
{
if(other.gameObject.layer == 8)
{
isGrounded = true;
}else { isGrounded = false; }
}
Run Code Online (Sandbox Code Playgroud)
玩家在生成时处于直播状态。之后玩家落到了地形,其中有标签Ground
,isGrounded
仍然是假的。当我手动将 isGrounded 设置为 true 并再次跳转时,碰撞后仍然为 true。我也不希望玩家在空中双跳,我可能已经编码但由于出现问题而无法正常工作。
更改OnTriggerStay
为OnTriggerEnter
不会改变某些内容。我希望你能帮助我。
千万不能使用OnTriggerStay
做到这一点。这不能保证每次都是真的。
OnCollisionEnter
调用时将 isGrounded 标志设置为 true 。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;
}
}
Run Code Online (Sandbox Code Playgroud)
在你说它不起作用之前,请检查以下内容:
您必须拥有Rigidbody
或Rigidbody2D
附加到播放器。
如果是这样Rigidbody2D
,您必须使用OnCollisionEnter2D
和
OnCollisionExit2D
。
您必须在禁用 IsTrigger 的情况下将碰撞器连接到播放器。
确保你没有移动Rigidbody
与转换,如transform.position
和transform.Translate
。你必须Rigidbody
随着MovePosition
功能移动
。
归档时间: |
|
查看次数: |
18911 次 |
最近记录: |