簡體   English   中英

Unity OnTriggerEnter2D

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM