Jump to content
Unity Insider Forum

Fight!


Kojote

Recommended Posts

Grüße!

Bei meinem Spielchen gehts weiter, nach Spawn und Tod gehts nun an den Kampf. Wie gesagt ist es ein Tier-Spiel und die kämpfen wie Tiere, anspringen, Pfote hauen und der gleichen. Nun, wenn ich jagen will und das Tier anspringe bzw. mit der Pfote haue, muss etwas ja bei dem anderen Tier passieren, eine Reaktion und der Abzug von Lebenspunkten.

Bisher hatte ich zwei Ideen:

Collider-Version

Version hier wäre denk ich am besten, wenn der Collider des Spielers in einen Trigger Collider des Tieres eindringt, kann ich über OnTriggerEnter ja alles starten und kann auch die Schadenspunkte übermitteln. Frage hier wäre aber zum einen, wie unterscheide ich Angriff von nur mal Anrempeln, nicht das er von einen Schubs gleich Lebenspunkte verliert. Zum anderen, müsste der Spieler immer den Collider verlassen, um das nächste mal über den Trigger Schaden zu verursachen. Ist er zu nahe dran, passiert nichts oder ich muss OnTriggerStay nutzen und hier war im hintergrund irgendwie noch ein Performance-Gespenst.

Ray-Version

Die Ray-Version würde so ähnlich funktionieren, nur das ich beim Angriff nach vorn noch einen Ray nach vorn schiesse und da das selbe mache mit dem Trigger. Bietet aber den Nachteil, wenn er knapp daneben geht, sieht der Spieler zwar nen Angriff, wird aber nicht gewertet.

Was meint ihr dazu?

Grüße von Kojote

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Willst du überhaupt Hitboxen dafür benutzen? Also, dass man z.B. unter einem Schlag hindurchrollen kann wie in Dark Souls oder Monster Hunter. Da du über Raycasts nachdenkst, wohl eher nicht.

Warum dann überhaupt so aufwendig werden? Einfach das Tier nah heranrennen lassen und wenn's nah genug ist, Animation ausführen und Schaden geben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ach herrje, klar, es geht darum wenn der Spieler angreift, nicht umgekehrt... mein Fehler :D

Aber auch da brauchst du dir nicht zu viele Sorgen zu machen. Mach irgendein CheckSphere oder so vor den Spieler und mache Schaden auf das erstbeste, was du findest. Die Animation von deinen Figuren und ein paar Partikeleffekte reichen, damit Spieler kein Problem damit haben, wenn die sichtbaren Krallen mal nicht tatsächlich den Gegner berühren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich mache das immer mit Raycasts. Wenn ein Angriff gestartet wird, starte ich ein Timer, der den Schadens-Raycast genau dann startet, wenn die Hit Animation ihren Höhepunkt hat. Ich sorge immer dafür, dass die Angriffs-Animationen (First Person) immer direkt durch die Mitte des Bildschirms (Fadenkreuz) gehen und auch der Raycast geht einfach von der Kamera richtung Vector3.forward. Die glaube die Collider-Idee ist etwas umständlicher. Da musst du auf viel mehr achten. Beim Raycast machst einfach eine simple, Zeit verzögerte abfrage. Ich hab dann ein Damage-Interface gemacht. Wenn der Hit Collider ein GetCompont<IDamage>() hat, einfach Damage austeilen.

PS: Da hat Sascha recht, meistens wird da von Anfänger völlig übertrieben mit "Realismus". Der Spieler erwartet kein echter Realismus und wirklich realistische Spiele wären total Langweilig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um Realismus gehts mir gar nicht, es reicht das ich den Unterschied hab zwischen anrempeln und wirklichan angriff. Meine Idee war ja, weis nicht ob man das so macht, dass der Spieler angreift und der Enemy dies registriert und ich im Angriffsmoment rübergebe, Enemy erhällt 30 Punkte Schaden. Den Rest macht der Enemy selbst. Wichtig ist also der Informationsfluss, wann greift der Spieler an und wie viel Schaden gibt er ab. Ob die Kralle nun 2 mm weiter links oder rechts ist, ist mir egal, so viel Realismus muss nicht sein.^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ob ein Angriff statt findet, weiss das Enemy erst, wenn Schaden ausgeteilt wird. Der Spieler könnte sich ja kurz vor dem Hit noch wegdrehen.

Aber du könntest auch ein "Kampfmodus" machen: Der Spieler wechselt in den Kampfmodus mit [TAB] und kann mit Maustasten angreifen. Andere Tiere erkennen von weitem, dass eine Bedrohung auftaucht. Der Spieler (ist ja ein Tier), bewegt sich vielleicht anders und knurrt bisschen.

Der Vorteil ist, dass der Spieler wieder den Kampfmodus verlassen kann und die Maustasten kannst du dann für andere Aktionen brauchen wie Sammeln, Buddeln, Looten etc...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 9.10.2019 um 12:36 schrieb Kojote:

Ja aber woher weis ich wann es nur ein rannrennen und wann ein Angriff ist? Wie sollte das sonst gehen?

Da ich noch net mal weis wie so ein Kampfsystem sich Triggert bin ich da offen, bisher steht noch keine Codezeile.^^

Hallo,

 

So was in der Art hab ich schon mal mit einer Bool abfrage gelöst.

Dem anrennen vergibt man ja z.B eine Geschwindigkeit oder Kraft, ist die Kraft oder Geschwindigkeit größer als definiertes anrennen, wird der Angriffs Flag  auf true gesetzt und so kann in der Routine ausgewertet werden ob es sich um ein anlaufen oder Angriff  handelt.

 

Gruß Jog

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum fragst du nicht deine "Angriffstaste" ab?

Also wenn du dich im Trigger befindest && die Taste gedrückt wird == Schaden:

So verhinderst du auch dass durch ein vorbei rennen oder anrempeln schaden entsteht!

Also immer beides abfragen:
 

if(Angriffstaste gedrückt && TriggerCollider  berührt){
--> Füge dem Gegner schaden zu
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jop, mach ich jetzt auch, ich hab das ganze abfragen nun mit der linken Maustaste verbunden. Wenn die linke Maustaste gedrückt wird, wird die Colliderabfrage erst aktiv. Damit funktionierts ganz gut. Einzig die Collider muss ich noch in der Größe anpassen, nicht jeder Treffer ist auch ein Treffer, obwohl es so aussieht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...