Unity - OnTriggerEnter soll nur bei BoxCollider triggern?

1 Antwort

Hi,

zwei Möglichkeiten:

Verschiedene Tags

Die Box-GameObjekte bekommen den Tag "Box" und Circle-GameObjekte den Tag "Circle". In OnTriggerEnter2D prüfst Du dann, ob Du mit dem Tag Box oder Circle kollidierst und kann entsprechend etwas (nicht) tun.

Verschiedene Layer

Wenn Du erst gar nicht willst, dass die Dinger kollidieren können, dann musst Du verschiedene Layer benutzen und dann in der Layer Collision Matrix die Layer-Kollision bei dem Layer ausschalten, in dem die Objekte mit dem CircleCollider sind, siehe hier: https://docs.unity3d.com/Manual/LayerBasedCollision.html

Woher ich das weiß:Berufserfahrung – Indie Game Entwickler & Content Creator auf YouTube

Seehundy 
Beitragsersteller
 15.05.2021, 14:32

ich hab die Antwort gefunden, aber danke trotzdem nochmal

1
BoundfoxStudios  15.05.2021, 14:51
@Seehundy

Ja, prinzipiell geht das so auch, gut ist's nicht, da du immer noch zu viele Kollisionen berechnest. Bei kleinen Games macht das nix, kann aber schnell Performance kosten. :)

0
Seehundy 
Beitragsersteller
 15.05.2021, 12:50

Hi, danke für deine Antwort. Ich hatte mich bei der Frage wahrscheinlich unklar ausgedrückt. Es gibt nicht ein Obejct, dass boxcollider hat und ein Object, dass Circle collider hat, sondern haben beide Objekte jeweils einen boxcollider und auch einen Circle collider. Es gibt also insgesamt 4 collider. Momentan ist es so, dass der Circle collider triggert, wenn er den Box collider ODER auch den Circle collider des anderen Objekts trifft. Die Circle collider sollen jedoch nur dann eine Funktion auslösen, wenn sie auf den Box collider collidieren, aber nicht, wenn sie auf den anderen Circle collider treffen.

0
BoundfoxStudios  15.05.2021, 13:23
@Seehundy

Das musst du dennoch auf gleiche Art und Weise lösen. Du musst dann deinem HauptObjekt weitere KindObjekte geben und dort jeweils die Collider drauf. Anders kannst du es sonst nicht bestimmen. Und dann würde ich auf jeden Fall mit der Layer Collision Matrix arbeiten, da Unity sonst permanent die Kollision berechnet, auch wo du es gar nicht brauchst.

mit nur einem Objekt ist das sonst nicht machbar

0
Seehundy 
Beitragsersteller
 15.05.2021, 14:39
@BoundfoxStudios

Das mit dem Child Object wäre eine Möglichkeit. Ich konnte das Problem jedoch simpler lösen.

Falls es dich interessiert:

BoxCollider2D Box = collider.gameObject.GetComponent<BoxCollider2D>();

CircleCollider2D Circle = collider.gameObject.GetComponent<CircleCollider2D>();

if (collider == Box)

Klappt wunderbar :)

1