簡體   English   中英

在 Unity 中檢測重疊的多邊形對撞機

[英]Detecting overlapping polygon2D colliders in Unity

我正在嘗試編寫等距建築放置腳本。 每個建築物上都有一個帶有觸發器的 PolygonCollider2D 組件。 放置新建築物時,我試圖檢查已放置建築物的 PolygonCollider2D 是否與其他任何東西重疊(以檢查放置是否有效)。 我的代碼如下:

根據鼠標位置調整新放置的建築碰撞器的點數

Vector2[] points = polygonCollider2D.points;
points.SetValue(polygonCollider2D.points[0] + (Vector2)mousePosition, 0);
points.SetValue(polygonCollider2D.points[1] + (Vector2)mousePosition, 1);
points.SetValue(polygonCollider2D.points[2] + (Vector2)mousePosition, 2);
points.SetValue(polygonCollider2D.points[3] + (Vector2)mousePosition, 3);
polygonCollider2D.points = points;

設置聯系人過濾器:

ContactFilter2D contactFilter2D = new ContactFilter2D();
contactFilter2D.useTriggers = true;
contactFilter2D.SetLayerMask(polygonCollider2D.gameObject.layer);

檢查碰撞

List<Collider2D> list = new List<Collider2D>();
Debug.Log(polygonCollider2D.OverlapCollider(contactFilter2D, list));

但是,如果那里已經有建築物,它仍然不會記錄重疊。 我錯過了什么/做錯了什么?

非常感謝你的幫忙!

您設置多邊形碰撞點的代碼似乎是這里的問題。 如果該代碼多次運行,它將反復將碰撞器偏移到越來越遠離其原始位置的位置。 你可能不想改變實際的碰撞器; 通常你應該移動有碰撞器的物體。 所以你可以用這樣的東西替換這些行:

gameObject.transform.position = mousePosition;

暫無
暫無

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

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