簡體   English   中英

Unity2D 檢測多個觸發碰撞

[英]Unity2D Detecting multiple trigger collisions

我正在嘗試為我的游戲制作一個攻擊系統,目前是這樣的:

 private void Start()
{
    triggerActive = false;
}

private void Update()
{
    if (triggerActive)
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            enemyOne.Attacked();
        }
    }
}

private void OnTriggerStay2D(Collider2D col)
{

    triggerActive = true;
   enemyOne = col.gameObject.GetComponent<Hittable>();
   
}
private void OnTriggerExit2D(Collider2D collision)
{
    triggerActive = false;
    enemyOne = null;
    
}

目前這很好用,但現在我想嘗試同時檢測多個對撞機,這樣我就可以同時攻擊兩個不同的敵人。 我怎么能那樣做?

您可以檢查 OnTriggerStay2D:

if (col.gameobject == enemyone)
...
else if (col.gameobject == enemytwo)
...

對於敵人一個和敵人兩個,您可以使用在 Unity 編輯器中從外部引用的兩個公共游戲對象。

還有其他示例如何迭代許多敵人:

void OnTriggerStay2D(Collision collision)
{
        foreach (ContactPoint contact in collision.contacts)
        {
            print(contact.thisCollider.name + " hit " + contact.otherCollider.name);
            // Visualize the contact point
            Debug.DrawRay(contact.point, contact.normal, Color.white);
        }
}

首先,您需要將觸發標志從此類移動到 Hittable 類。

class Hittable
{
    public bool isHit = false;
}

然后你需要用一個 Hittable 對象列表替換敵人。

List<Hittable> enemies = new List<Hittable>();

當觸發器擊中敵人時,我們將敵人添加到敵人列表中。 OnTriggerExit2D 不是必需的,因為我們每幀都清除列表。

private void OnTriggerStay2D(Collider2D col)
{
   var enemy = col.gameObject.GetComponent<Hittable>();
   if (!enemy.isHit)
   {
       enemy.isHit = true;
       enemies.Add(enemy);
   }
}

最后,我們每幀攻擊列表中的敵人。

private void Update()
{
    if (enemies.Count > 0)
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            foreach (var enemy in enemies)
            {
                enemy.isHit = false;
                enemy.Attacked();
            }
        }
        enemies.Clear();
    }
}

您可以使用 Physics2D.OverlapCircleAll 來檢測特定半徑內的所有對撞機(敵人)。 或者您也可以使用 Physics2D.CircleCastAll 來檢測所有對撞機(敵人),除了那些被其他隱藏的碰撞機。

有關更多信息,您應該查看 Unity 文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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