Jump to content
Unity Insider Forum

Schaden übermitteln


SimpleScript

Recommended Posts

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...