我希望玩家在玩家停飞时跳跃。
private void OnTriggerStay(Collider other)
{
if(other.gameObject.layer == 8)
{
isGrounded = true;
}else { isGrounded = false; }
}
播出时播放器播出。播放器落入具有标记Ground
的地形后,isGrounded
仍为假。当我手动设置isGrounded并再次跳转时,它在碰撞后仍然是真的。我也不希望玩家在空中双跳,我可能已编码但由于出了问题而无法正常工作。
将OnTriggerStay
更改为OnTriggerEnter
不会改变某些内容。我希望你能帮助我。
答案 0 :(得分:2)
不使用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;
}
}
在您说它不起作用之前,请检查以下内容:
您必须在播放器上附加Rigidbody
或Rigidbody2D
。
如果是Rigidbody2D
,则必须使用OnCollisionEnter2D
和
OnCollisionExit2D
。
您必须使用IsTrigger将Collider连接到播放器 禁用。
确保您没有使用此类转换移动Rigidbody
作为transform.position
和transform.Translate
。你必须搬家
具有MovePosition
功能的Rigidbody
。
答案 1 :(得分:0)
用它来检查是否检测到碰撞,这是进一步调试的良好起点:
private void OnTriggerStay(Collider other)
{
Debug.Log(other);
}