dosenbiiir Posted November 7, 2014 Report Share Posted November 7, 2014 Hey ho Leute Ich habe da ein kleines Problem und zwar wird von einem Collider die Methode OnTriggerEnter2D ausgelöst obwohl keine Kollision vorliegt. (bzw OnTrigger) Also mein Spieler besteht aus einer Plane und 2 Collider 2D(einen für Füße, Beine und Oberkörper; und einen für den Kopf) jetzt habe ich einem Collider2D vor den Spieler gesetzt aber höher als das zum ende des Spielers. Somit berührt der Collider niemals den Boden. Damit möchte ich rauszufinden ob er gegen ein Hinderniss (z.b. eine Wand) gelaufen ist. Denn dann soll er tot sein oder ein leben verlieren. funktioniert auch soweit. Nur das Problem ist wenn der Spieler eine gewisse Höhe runter fällt wird die Methode OnTriggerEnter2D trotzdem aufgerufen obwohl der Collider niemals den Boden berührt. wie kann ich das nun verhindern ? oder warum wird es trotzdem aufgerufen ? Der Spieler bewegt sich mithilfe von rigidbod2D.velocity liebe grüße dosenbiiir Link to comment Share on other sites More sharing options...
reinerSCT Posted November 7, 2014 Report Share Posted November 7, 2014 Probier mal ne gameObject Tag Abfrage einzubauen und geb der Wand diesen Tag, dann ist es ja eigentlich egal, ob er den Boden berührt. Vielleicht berührt der Trigger auch beim Aufprall einen Collider vom Körper. Link to comment Share on other sites More sharing options...
dosenbiiir Posted November 7, 2014 Author Report Share Posted November 7, 2014 Probier mal ne gameObject Tag Abfrage einzubauen und geb der Wand diesen Tag, dann ist es ja eigentlich egal, ob er den Boden berührt. Vielleicht berührt der Trigger auch beim Aufprall einen Collider vom Körper. werde ich wohl zwangsläufig machen müssen :/ das Problem ist das diese 'Wände' auch als Boden funktionieren ^ das wird so ein Jump and Run ... und es berührt 100% ig den Boden habs geprüfte mit Debug.Log(hit.gameObject.name); nur da ist immer ein großer Abstand zwischen dem Boden und dem Collider ... merkwürdig Link to comment Share on other sites More sharing options...
reinerSCT Posted November 7, 2014 Report Share Posted November 7, 2014 mhh, ich kann da jetzt eigentlich nur noch vermuten, da ich so ein Problem noch nicht hatte. Ich kann mir vorstellen, dass die Fallgeschwindigkeit so hoch ist, dass die Physic Engine nicht mehr klarkommt. Probier doch mal die Fallgeschwindigkeit zu verringern. Link to comment Share on other sites More sharing options...
dosenbiiir Posted November 7, 2014 Author Report Share Posted November 7, 2014 mhh, ich kann da jetzt eigentlich nur noch vermuten, da ich so ein Problem noch nicht hatte. Ich kann mir vorstellen, dass die Fallgeschwindigkeit so hoch ist, dass die Physic Engine nicht mehr klarkommt. Probier doch mal die Fallgeschwindigkeit zu verringern. die fallgeschwindigkeit ist nicht groß das sollte kein Problem darstellen. (anscheinend ja doch irgendwie :/ ...) aber verringern kann ich sie nicht. PS: ich habe ein Bild angehängt an den Kommentar von davor Link to comment Share on other sites More sharing options...
reinerSCT Posted November 7, 2014 Report Share Posted November 7, 2014 mach mal den Trigger an ein eigenes GameObject. Dein Skript fragt ja alle Collider ab. Geh ich mal von aus. Edit: Obwohl ist eig. Unlogisch, da die anderen Collider ja nicht auf Trigger gesetzt sind. Die überlappen auf dem Bild auch so komisch. Kannst du das nicht mal ändern? Link to comment Share on other sites More sharing options...
dosenbiiir Posted November 7, 2014 Author Report Share Posted November 7, 2014 mach mal den Trigger an ein eigenes GameObject. Dein Skript fragt ja alle Collider ab. Geh ich mal von aus. Edit: Obwohl ist eig. Unlogisch, da die anderen Collider ja nicht auf Trigger gesetzt sind. Die überlappen auf dem Bild auch so komisch. Kannst du das nicht mal ändern? Der Collider ist bereits in einem eigenen gameObject ^^ sieht man auf dem Bild jetzt nicht wenn ich den Collider kleiner mache damit er sich nicht mehr überlappt ist er schon fast zu klein für unity aber ich versuche es morgen mal denke das ändert aber nichts ... aber danke für deine Hilfe ^^ Link to comment Share on other sites More sharing options...
reinerSCT Posted November 7, 2014 Report Share Posted November 7, 2014 Habs gerade mal nachgebaut. Funktioniert einwandfrei, selbst mit x überlappenden Collidern. Ich bin dann erstmal mit meinem Latein am Ende. Da müssen wir wohl auf die Mr.Malzbies und Konsorten warten. Link to comment Share on other sites More sharing options...
Sascha Posted November 7, 2014 Report Share Posted November 7, 2014 Joa, so läuft das in der Physikengine. Objekte prallen nicht irgendwo gegen, sondern landen in irgendetwas drin und werden dann wieder raus gesetzt - das passiert natürlich zwischen zwei Frames, sodass man die kaputte Invariante nicht sieht. Die Events werden trotzdem ausgelöst. Ich denke, die schlauste Lösung wäre, das nicht über einen Trigger zu machen, sondern über OnCollisionEnter2D mit den anderen beiden Collidern. void OnCollisionEnter2D(Collision2D collision) { foreach(var contact in collision.contacts) { if(IstAnDerSeite(contact.point) { Die(); } } } Man muss sich dann nur ausdenken, wie IstAnDerSeite implementiert sein soll. Link to comment Share on other sites More sharing options...
dosenbiiir Posted November 8, 2014 Author Report Share Posted November 8, 2014 Joa, so läuft das in der Physikengine. Objekte prallen nicht irgendwo gegen, sondern landen in irgendetwas drin und werden dann wieder raus gesetzt - das passiert natürlich zwischen zwei Frames, sodass man die kaputte Invariante nicht sieht. Die Events werden trotzdem ausgelöst. Ich denke, die schlauste Lösung wäre, das nicht über einen Trigger zu machen, sondern über OnCollisionEnter2D mit den anderen beiden Collidern. void OnCollisionEnter2D(Collision2D collision) { foreach(var contact in collision.contacts) { if(IstAnDerSeite(contact.point) { Die(); } } } Man muss sich dann nur ausdenken, wie IstAnDerSeite implementiert sein soll. hatte ich mir schon irgendwie gedacht hielt es aber für unwahrscheinlich aber dann wird es wohl daran liegen ... ich weiß nur noch nicht wie ich mit dem IstAnDerSeite umgehen soll. Könntest du mir da nochmal kurz helfen? Danke für deine Hilfe Link to comment Share on other sites More sharing options...
reinerSCT Posted November 8, 2014 Report Share Posted November 8, 2014 Hab da eben mal mit rumgespielt. Mit dem Code läuft es bei mir wunderbar. Ich weiß aber nicht, ob das so optimal gelöst ist. void OnCollisionEnter2D(Collision2D collision) { foreach(var contact in collision.contacts) { Vector2 pointNormal = contact.point.normalized; if(pointNormal.x >= 0.99f) { Debug.Log("Damage"); } } } Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.