Tutorial C# – RPG Basics – Abilities – # 3

05 Sep 2013 Posted by: Comments: 0 In: Allgemein, C#, Game Design, Programming, Tutorial, Unity3D

Hallo zusammen,

Beim letzten Mal haben ich ja gezeigt wie man seine Fähigkeiten mit einem „Cooldown“ versehen kann. In dieser Runde werde ich euch zeigen, wie man grundlegend ein Kampfsystem angehen kann. Dabei sei wie immer gesagt, dass es sich um das Prinzip handelt und das Ganze natürlich weiter ausgebaut werden kann (und muss).

Ziel ist es am Ende zwei Testattacken nutzen zu können, die mit einem Cooldown versehen sind. Diese Attacken machen anhand von unterschiedlichen Charakterwerten Schaden am Gegner. Dinge wie Animationen und der damit verbundene Zeitversatz zwischen Auslösen der Attacke und der verzögerten übermittlung des Schadenswertes werden komplett vernachlässigt.(der Schaden sollte ja nicht schon am Gegner abgezogen werden, während der Angreifer erst zum Schlag ausholt)

Wer das Tutorial nachvollziehen möchte, sollte vorher Teil 1 und Teil 2 gemacht haben.

Zuerst einmal müssen wir klarstellen, wen wir angreifen. Dafür erweitern wir das Player.cs ganz simpel um

.

Cool sind auch ein paar klassische RPG-Werte mit denen man arbeiten kann. Die kommen ebenfalls in die Player.cs

AttackStat ist ein enum und sieht folgendermaßen aus:

schreibt es im Script üBER die Player-Klasse in Player.cs. Enums eigenen sich für solche Dinge recht gut, da sich hier ein definierter Name und ein Wert an einer Stelle speichern lassen.

Außerdem muss noch die Start Methode angepasst werden und wird um folgende Zeile erweitert:

Für ein Kampfsystem brauchen wir natürlich noch: Attacken. Was sind Kämpfe schon ohne Attacken?! 🙂

Dafür legen wir eine neues C#-Script an und nennen es Attack

Dieses Script dient als Basisklasse und natürlich können spezielle Attacken davon erben. Für den Anfang reicht aber dieses eine Script.

Um die Attacken nutzen zu können legen wir nun noch eine Variable in der Player.cs an

und initialisieren sie in der Start Methode mit

Jetzt kann zwar eine Instanz von Attack erzeugt werden, aber was sollte da mit schon passieren? es braucht noch eine kleine Methode und ein paar Variablen.

Was genau ist DoDamage und GetStatValue?

Ersteres ist nichts anderes als eine einfache Methode, die unsere Healthpoints in Player.cs bearbeitet:

GetStatValue sieht folgendermaßen aus:

Um das Ganze zu vereinfachen gibt GetStatValue anhand des AttackStat dessen Wert zurück. Hier wäre Platz für Formeln, oder besser noch ein Aufruf eines Scripts, das aus dem AttackStat einen neuen Wert wie AttackPower berechnet und zurückgeben kann! In unserem Fall ist es nur der Strength-Wert, also 10.

Wenn also der Attacker seine Attacke auslöst, wird in der Attack-Klasse anhand dessen Werte berechet, welchen Schaden der Defender (der Angegriffene/Verteidiger) bekommt. Auch hier lässt sich noch viel machen, zb. um den Schaden anhand eines Wertes des Defenders zu verringern.

Soetwas kann dann so aussehen: (bitte nicht in das Script einfügen)

DamageReduce muss dann jedoch im enum angelegt werden und natürlich initialisiert werden!

Damit die Attacken nun bei Knopfdruck aktiviert werden, bzw die Schadenswerte auch an den Defender übermittelt werden, muss die attack-Methode ausgelöst werden.
Dies geschieht in Player.cs, in der Update-Methode und zwar dann, wenn der Knopf gedrückt wurde und der CoolDown bei 0 ist.

wir übergeben „this“, also die Player.cs aus der die Attacke ausgelöst wird, das Player.cs-Script des Ziels, den Modifier der Fähigkeit und den Wert, der die Attacke beeinflusst.

Gleiches gilt für die andere Attacke:

Nun Geht es an Testen und dafür kopieren wir das GameObject des Spielers und nennen es Defender. Für die Qick and Dirty Variante habe ich anfangs drei bools in die Player.cs genommen:

stellt diese im Inspector beim Player auf: useAbilities = true; showHealth = false und showCooldowns = true;

Beim Defender stellt alles auf false, bis auf showHealth, das sollte true sein,

Die OnGUI-Methode muss nun noch angepasst werden, denn sonst sehen wir ja nichts.

Nun muss beim Player der Defender in den GameObject-Slot des Inspector gezogen werden und andersherum, damit wir auch ein target haben.

Nun sollte dem Defender Healthpoints abgezogen werden, wenn man die Attacken ausführt 🙂

Hier der Dropbox-Link. zur aktuellsten Version 1_7

Und viel Spass beim erweitern dieses Systems 🙂

Leave a Comment!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.