SimpleScript Geschrieben 1. Februar 2016 Melden Share Geschrieben 1. Februar 2016 Hallo werte Community, Ich arbeite derzeit an einen kleinen Kampfsportspiel als Sidescroller und setzte dort gerade das Kampfsystem um. Leider gestaltet sich das doch schwieriger als gedacht wodurch ich lieber mal euch frage wie ihr das lösen würdet. Meine erste Idee war es verschiedene Boxen zu erstellen, die den jeweiligen Bereich des Schlages oder Trittes darstellt. Wenn der Gegner in diese Box kommt und ich "E" drücke, sollte der Schaden übermittelt werden. Sprich die Box geht an und dann wieder aus. So hätte ich auch die Möglichkeit verschiedene Höhen zu nutzen. Problem hierbei ist, das ich immer nur einmal den Schaden übersenden kann und nicht mehrmals hintereinander. Meine zweite Idee war es mit Raycast umzusetzen. Was mich hierbei gestört hat war die nicht Beachtung von verschiedenen Angriffshöhen, da ja der Raycast immer Zentral von der Figur ausgesendet wird, soweit ich das richtig verstanden habe. Ich denke mal hier könnte ich auch eine Lösung daraus basteln, aber diese wäre dan doch eher unpraktisch. Und die letzte Idee meinerseits war SendMassage. Sprich wenn der Gegner meinen Collider berührt und ich wieder "E" drücke, wird der Schade übermittelt. habe dabei aber das gleich Problem wie oben. Sprich der Gegner muss immer erst den Collider verlassen, damit ich wieder Schaden machen kann. Vielleicht habt ihr ja eine bessere Idee für das Umsetzen dieses Problemes. MfG BerlinGames Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Wattsefakk Geschrieben 1. Februar 2016 Melden Share Geschrieben 1. Februar 2016 Hmm wenn ich mich nicht komplett irre müsste das doch eigentlich einfach über OnCollisionStay funktionieren hier der Link zur Scripting API http://docs.unity3d.com/ScriptReference/Collider.OnCollisionStay.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
SimpleScript Geschrieben 1. Februar 2016 Autor Melden Share Geschrieben 1. Februar 2016 Leider hier auch das gleiche Problem auf das er nur einmal schaden sendet. Sprich wenn ich mehrmals meine Angriffstaste drücke, wird der schaden nur einmal gesendet, auch wenn ich TriggerStay bzw CollisionStay nutze. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 1. Februar 2016 Melden Share Geschrieben 1. Februar 2016 Setz doch einfach in OnCollisionEnter ein flag (bool auf true) und immer wenn das flag gesetzt ist und du "E" drückst, soll Schaden ausgeteilt werden. In OnCollisionExit wird das flag wieder auf false gsetzt. bool attackFlag = false; void OnCollisionEnter(Collision c){ // Wenn du mit einem Gegner kollidiert bist attackFlag = true; } void OnCollisionExit(Collision c){ // Wenn du mit einem Gegner kollidiert bist attackFlag = false; } void Attack(){ if(attackFlag && Input.GetKeyDown(KeyCode.E)){ dealDamage(); } } Also so in etwa.. Du könntest dir in OnCollisionEnter natürlich auch noch eine Referenz auf den Gegner wegspeichern und sonstige tolle Dinge machen, die du brauchen könntest. Alternativ könntest du ja auch deinen Code zeigen, damit wir wissen was du eigentlich genau machst ^^ Auch wenn ich die Methode nicht besonders mag, sollte das nämlich auch in der OnCollisionStay ohne weiteres möglich sein. So sollte das z.B. funktionieren void OnCollisionStay(Collision c){ if(Input.GetKeyDown(KeyCode.E)) * { // Laufe alle Contact Points durch // Falls ein Gegner dabei ist // Füge Schaden zu } } * Würde da zuerst die Input Abfrage machen und erst im Eingabefall die Contact Points durchlaufen, sonst wird da permanent unnötig rumgesucht und letztendlich doch nichts gemacht ^^ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 1. Februar 2016 Melden Share Geschrieben 1. Februar 2016 In OnCollisionStay ist das nicht möglich, weil es auf dem FixedUpdate-Zyklus liegt und Input.GetKeyDown auf Update. Das Drücken des Keys kann damit mehrere Male oder gar nicht erkannt werden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 1. Februar 2016 Melden Share Geschrieben 1. Februar 2016 Ah okay, gut zu wissen Ich benutz das zwar nie aber trotzdem ^^ So im Nachhinein logisch.. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
SimpleScript Geschrieben 1. Februar 2016 Autor Melden Share Geschrieben 1. Februar 2016 Erstmal danke für die Antworten. Ich hab das Problem gerade gelöst bekommen. Meine Lösung: Ich habe halt wie im dritten Lösungsansatz Boxen erstellt für die verschiedenen Punchhöhen. Diese checken dann ob ein Gegner den Bereich betritt und falls ja, wird dies an meinen Angriffverwaltungsscript weitergeleitet. Von dort aus kann ich dann die verschiedenen Angriffe ausführen, auch mehrmals hintereinander. Da dort nur ein bool True gesetzt wird. MfG Berlingames Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.