Tutorial C# – RPG Basics – Abilities – # 1

04 Okt 2013 Posted by: Comments: 0 In: Allgemein, C#, Programming, Tutorial, Unity3D

Hallo und willkommen zum zweiten Teil einer kleinen Tutorialreihe rund um das Thema RPG.
In diesem Teil möchte ich euch demonstrieren wie man seinem Character Fähigkeiten gibt.
Dies soll als Basis für ein Kampfsystem dienen. Im Rahmen des Tutorials und der Tatsache, das dieses Gebiet komplex werden kann, wird dieses AbilitySystem natürlich nicht riesig werden und nur die grundlegende Herangehensweise demonstrieren.
Jedoch wird es so angelegt, dass es nach oben skalierbar lässt!
Dieses Tutorial richtet sich eher an Anfänger als an Fortgeschrittene und natürlich auch an Diejenigen, die solche Systeme schon immer interessiert haben. Wie immer ist das Ganze eine von vielen Möglichkeiten ein AbilitySystem umzusetzen.

Legen wir los und definieren erstmal die Fähigkeit. Dafür legen wir uns eine Klasse an:

Soweit so gut, wir haben eine Fähigkeit. Das ging schnell…wir sind fertig 😉 nene…
Diese Fähigkeit wird uns nun als Basis für alle anderen Fähigkeiten dienen, die einem so einfallen könnten.

Damit wir mit dieser Fähigkeit etwas anfangen können, bekommt sie einige Parameter und wir nehmen an, dass diese Fähigkeit Schaden am Gegner verursachen soll.
Ganz im Stile der MMO´s geben wir den Fähigkeiten Abklingzeiten, bzw „CoolDowns“, die bestimmen in welchem Interval die Fähigkeit benutzt werden kann.

Um Fähigkeiten zu nutzen, müssen sie natürlich irgendwie ins Spiel gelangen.
Dazu nutze ich gerne Dictionaries. Sicher mag jetzt der ein oder andere sagen, das man ja auch Lists nutzen kann oder ArrayLists.

Ich entscheide mich jedoch definitiv für das Dict und lasse es folgendermaßen aussehen:

 

Zum Nachlesen:
http://www.dotnetperls.com/dictionary

Dieses Dict kann man jetzt einfach zu seinem CharacterScript hinzufügen ODER wir machen ein neues und nennen es Player.cs

Wichtig: using System.Collections.Generic; ! Sonst wird´s nichts mit dem Dict;)

Der Grund Dictionaries zu verwenden ist einfach der, dass sich auch später wesentlich besser nachvollziehen lässt welche Fähigkeit
gerade wohin geschickt wird etc. alles läuft anhand des Names der Fähigkeit (anstatt einer ID), so dass auch nach wochen noch klar ist,
was eine Fähigkeit ist, warum sie so heißt. Ich für meinen Teil kann mit der Fähigkeit „Mortal Strike“ mehr anfangen als mit der id 6534651 😉
Davon abgesehen nutzen wir eh eine recht übersichtliche Anzahl von Fähigkeiten und nicht 100000.

Um nun endlich die Fähigkeit verfügbar zu machen, muss sie noch ins Dict, das machen wir in der Start Methode.

Damit das noch ein wenig flexibler wird:

Damit es noch etwas schicker wird geben wir der Ability einen Konstruktor mit einigen überladungen mit.

Das sollte reichen für´s Erste, später gibt es hier noch einiges umzustellen, also nicht voreilig werden;)

Jetzt schauen wir nochmal in die Start Methode der Player.cs

Wir können nun natürlich auch mehrere Fähigkeiten on the fly erstellen:

Schnell sollte hier klar werden, dass sich das so auf Dauer nicht so schön bearbeiten lässt und wir Unmengen an Variablen erzeugen.
Eine Lösung werden wir uns später anschauen.

Um nun die Fähigkeit auch mal zu „benutzen“ müssen wir sie noch auslösen.
Auch das passiert in der Player.cs!

Wir erweitern das Script um eine Update Methode, lösen die Fähigkeiten per Tastatur aus und benutzen den CoolDown.

Damit die Abklingzeit wieder zurückgesetzt werden kann (wir wollen ja die Fähigkeit nach Zeit X wieder benutzen )
müssen wir sie noch updaten.

Das Ganze in die Update Methode:

Die Player.cs sollte nun so aussehen:

Soweit, so gut.
Im nächsten Teil kümmern wir uns darum, dass die Abilities und ihre Werte einfacher zu modifizieren sind, ohne sie jedes Mal in der Start Methode neu zu setzen.
Danach integrieren wir ein kleines Kampfsystem in dem wir in der Console ein wenig „Schattenboxen“ um so die Fähigkeiten zu testen 😉

#edit: bugfrei!

Dropbox Link zum Package – ohne jedoch die Herangehensweise zu verstehen bringt es nicht viel;)

Weiter geht´s hier –> rpg-basics-abilities-teil-2 <–

Leave a Comment!

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.