[英]Unity OnTriggerEnter2D
任何人都可以幫助我如何解決我遇到的這個問題?
*第一個腳本:
public static bool attacking;
public Collider2D attackTrigger;
private void Awake()
{
attackTrigger.enabled = false;
}
private void Update()
{
if (attacking == true)
{
Debug.Log("Box Collider Enabled");
attackTrigger.enabled = true;
StartCoroutine(DisableCollider());
}
}
IEnumerator DisableCollider()
{
yield return new WaitForSeconds(1);
attacking = false;
attackTrigger.enabled = false;
Debug.Log("Box Collider Disabled");
}
*第二個腳本:
public float damage = .10f;
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.isTrigger!=true && collision.CompareTag("Enemy"))
{
Debug.Log("Enemy is Damaged");
EHealthBar.TakeDamage(damage);
}
}
我正在嘗試讓我的玩家角色通過碰撞攻擊敵人,它確實起作用並且玩家確實傷害了敵人,但是只有當敵人的對撞機再次進入我的攻擊時,它才起作用。
如果敵人已經在我的攻擊區域中並附加了方塊碰撞2d,則該敵人不會受到傷害,這不是我想要的。
我可以將其更改為OnTriggerStay2D,但敵人將繼續受到傷害,直到再次禁用對撞機為止。 想要幫助嗎?
我認為問題是
IEnumerator DisableCollider()
{
yield return new WaitForSeconds(1);
attacking = false;
...
這會導致更新中的IF語句仍然持續1秒鍾並啟動大量協程。 最簡單的解決方案是將移動攻擊=假; 在屈服之前,但我想您想使用該變量來知道用戶是否處於攻擊狀態。 所以我建議使用另一個布爾變量。
if (invokeAttack)
{
attacking = true;
invokeAttack = false
Debug.Log("Box Collider Enabled");
attackTrigger.enabled = true;
StartCoroutine(DisableCollider());
}
無論如何,您沒有向我們展示如何調用攻擊,但不是將變量(在您的情況下為attacking / invokeAttack)更改為true並在Update中進行檢查,您只是調用了啟用對撞機並啟動協程的方法?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.