Category

26 Jan 2014 Posted by: Comments: 0 In: Allgemein, C#, Game Design, Global Game Jam, Modelling, Unity3D

Heute sind wir erst gegen 10 Uhr an den Start gegangen und haben zuerst entspannt gefrühstückt, bevor es wieder richtig zu Sache gegangen ist. Ein paar soziale Interaktionen mit „echten Menschen“ müssen auch mal sein. 😉 Fachgespräche sind natürlich auch dabei, außerdem ist es ja auch interessant was die anderen Teilnehmer auf die Beine stellen!

Da es bei unserer Idee darum geht nur mit Hilfe von Kopfbewegungen die Anwendung zu steuern, musste auch ein passendes Controller-Script her. Dieses wurde heute entwickelt und getestet. Während ich also am Script gearbeitet habe, hat sich Björn um ein paar 3D Modelle gekümmert. Ich war schon überrascht über seinen sehr schnellen Workflow in Silo!
Leider bietet OpenDive nicht alle Möglichkeiten die Oculus Rift bietet, daher sind wir zwar eingeschränkter, allerdings helfen diese Einschränkungen auch dabei ein wenig schneller vorwärts zu kommen. Bevor ich lange weiter schreiben – der Game Jam ruft!

Weiter geht´s!

25 Jan 2014 Posted by: Comments: 0 In: Allgemein, C#, Game Design, Global Game Jam, Modelling, Unity3D

IMG-20140124-WA0000

Björn mit der OpenDive an unserem Projekt

 

Pünktlich 14.30 Uhr stand ich also fertig gepackt, mit Laptop, Iso-Matte und Schlafsack vor meiner Tür und wartete auf meine Mitfahrgelegenheit nach Leipzig. Kalt war´s! Leider war der junge Mann, welcher sich später als angenehmer und witziger Zeitgenosse entpuppte, nich ganz ortskundig in Halle. Nach seiner langen Oddysee durch Halle traffen wir uns dann endlich am Hallmarkt. Schnell das Zeug in den Wagen gepackt und schon waren wir startklar für den GLOBAL GAME JAM, an dem er übrigens auch teilnehmen wollte. Mit leichter Verspätung trudelten wir auch ein und kaum angekommen wurden die ersten bekannten Gesichter begrüßt! Dann ging alles relativ zügig voran – Themenvorstellung, Vorstellrunde. Das übliche Prozedere! Das dauerte auch ein Welchen, denn in diesem Jahr war der Andrang in Leipzig doch wesentlich größer als zuvor – Schöne Sache!
Das Thema war im ersten Moment doch ein wenig seltsam: „We don´t see things as they are. We see them as we are“.
Ich emfand das Thema als spannend und gleichzeitig ein wenig sperrig.
Schon vor dem Start habe ich mit Björn, einem ehemaligen Kommilitonen, über ein mögliches Team geredet. Open Dive war im Gerede und so sollte es auch sein! Also ging´s ans Open Dive Demo angucken, Beispiele testen und Ideen aus den Köpfen quetschen. Um für den Samstag richtig fit zu sein, ging es dann auch verhältnismäßig früh gegen 1.30 Uhr in den Schlafsack und gegen 9.30 Uhr wieder raus.

Weiter geht´s! 😀

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 🙂