Unity 2D Kollision mit if-Anweisung abfragen?
Hallo, wie kann ich in Unity eine Kollision von Box Collidern in einer If-Bedingung abfragen? Ich finde immer nur die Methoden die bei der Kollision ausgeführt werden sollen, aber nie etwas, was mir nur einen bool zurückgibt...
1 Antwort
Hi!
Wenn Du selbst prüfen willst, ob eine Kollision vor liegt und dafür nicht die Event-Methoden von Unity nutzen willst (sprich OnCollisionEnter2D etc), dann kannst Du einen Raycast machen: https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html
Du bekommst dort nicht direkt ein bool, sondern ein Objekt mit der Info, ob was getroffen wurde oder nicht. Das Beispiel siehst Du ja im Link.
Alternativ kannst Du natürlich Dein Bool auch selbst setzen. Auf true in OnCollisionEnter2D und auf false in OnCollisionExit2D.
Das kommt eben drauf an, was genau Du vor hast. :)
Was soll denn passieren, wenn sie kollidieren? Einfach stehen bleiben?
Ja genau. Geht das? Weil dass sich zwei kollidierende Objekte überlappen kann doch nicht gewollt sein...
Oh, das kann durchaus passieren. Ist ja nur Mathematik im Hintergrund.
Erster Anhaltspunkt:
Bei den Rigidbodies, die kollidieren, die Collision Detection Method auf "Continuous Dynamic" umstellen, dann wird's etwas genauer.
Wenn's immer noch nicht reicht, kannst Du an den Physik und Berechnungseinstellungen herumspielen. Die findest Du unter Edit -> Project Settings.
Dort dann einmal bei Time den FixedTimestep: Je kleiner die Zahl, desto mehr Physikiterationen werden berechnet. Per Standard läuft die Physik mit 50 Frames. Du kannst hier auch mal 75 oder 100 ausprobieren. Je mehr, umso genauer wird die Physik.
Alternativ im gleichen Menü, nur unter Physics 2D, sind weitere Einstellungen. Hier kannst Du bspw. mal bei Position Iterations oder Velocity Iterations schauen und die Werte langsam erhöhen.
Danke, jetzt ist es besser, auch wenn es noch ein bisschen zuckt, aber das passt...
Ok, danke! Hättest du vielleicht noch eine Idee wie ich verhindern kann dass zwei kollidierende Objekte kurz ineinander übergehen und dann zurückprallen? Ich habe schon versucht ein Material hinzuzufügen und die verschiedenen Werte geändert, aber das ändert nichts...