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