Jump to content
Unity Insider Forum

pixelart Sprites verschiedene Waffen/States


Recommended Posts

Hi again,

oh junge ich weiß nicht so wirklich wo ich anfangen soll mit meiner Frage. 

Ich habe mich wiedermal dazu breitschlagen lassen ein neues Projekt anzufangen. ein platformer mit ihm als hauptcharakter:

image.png.06805819949bdc1b1794a9986fa2b5c6.png

dieser Charakter soll in der lage sein, sein schwert (welches er im spielverlauf zu beginn findet) auszurüsten aber auch abzulegen:

image.png.28365bb1f9b2b85354d15efa51c22f3d.png

Anhand dessen ob er das Schwert equipped hat oder nicht soll er zwischen schwertkampf und faustkampf wechseln können. Diese unterscheiden sich nicht nur optisch sondern haben auch teilweise andere Eigenschaften. als Schwerkämpfer kann er z.b. so Zelda like einen Drehangriff machen oder nach vorne Dashen. Im Faustkampf hingegen kann man neben der standart 3teiligen angriffscombo auch Kicks benutzen.  

so viel zum Konzept aber leider bringt das einige Probleme mit sich von denen ich keine Ahnung habe wie ich sie alle sinnvoll gelöst bekomme:

1. Animation

Wie schaffe ich es dass der Spieler das schwert optisch ablegt und wieder ausrüstet? ich habe das Schwert zwar in Aseprite auf einem eigenen Layer gepackt wodurch ich es innerhalb von Aseprite sichtbar und unsichtbar machen kann aber wenn ich eben diese Layer in unity übertragen will müsste ich vermutlich das Schwert als ein eigenes Childobjekt vom Char machen welches dann seine KOMPLETT eigenen animationen parallel zu denen des Hauptchars abspielen müsste was meinen arbeitsaufwand an animationen praktisch verdoppelt. Eine andere Idee wäre vermutlich nicht das Schwert einzeln zu animieren sondern den Spieler komplett die animationen wechseln lassen abhängig davon ob er das schwert an hat oder nicht aber auch hier würde wieder gelten: Doppelter Arbeitsaufwand, Doppelter Code, Doppelte Fehlerquelle, etc. Praktisch ein komplettes moveset mit schwert und eins ohne welches ich dann z.b. mit nem bool hasSword oder was weiß ich toggle. Evtl helfen mir auch Secondary Textures bei dem Problem mit dem ich das Schwert als 2. Texture festlege welches ich dann sichtbar und unsichtbar machen kann. Aber leider es gibt gefühlt garkein Tutorial auf Youtube wie diese Teile genau funktionieren.

2. Logik

Das alles ist deckt aber so far nur die animation ab aber noch nicht die logik dahinter. Das behavior des Chars verändert sich ja komplett mit einem Schwert. er hat andere moves, stats, hitzones usw. Wie zur Hölle soll ich das alles in ein Script verpacken? Ich hab mich dazu auch schon online schlau gemacht und ich kam immer wieder zum Konzept von Statemachines zurück mit denen ich das behavior meines chars scheinbar komplett ändern kann wenn gewisse Kriterien erfüllt sind. Das Problem an der Geschichte ist dass die Tutorials die ich über Statemachines gefunden habe mein aktuelles Skilllevel total übersteigen. Ich fühle mich unwohl dabei, Dinge zu nutzen die ich nicht voll und ganz verstehe. Zumal sich ein Freund von mir mal gefühlt das Leben zur Hölle gemacht hat dadurch dass er Statemachines benutzt hat. Bevor ich mir das alles aneigne wüsste ich daher gerne erstmal ob ich Recht habe mit meiner Vermutung dass diese Statemachines eine gute Lösung für mein Problem wären. Evtl habe ich das Konzept auch komplett falsch verstanden und Sie haben andere Anwendungsbereiche.

3. Erweiterbarkeit

Das hier aufgezählte Beispiel mit dem Schwert ist zwar bisher das Einzige aber wenn ich später noch andere Waffen/States wie bogen, zauber, oder andere RPG Elemente hinzufügen möchte? Dann stehe ich vor dem gleichen Problem. Am liebsten wäre mir daher wirklich ein "modulares" System dass ich auf weitere Fälle erweitern kann ohne alles neu machen zu müssen. z.B. wenn der Spieler wählen kann zwischen Unbewaffnet, Bewaffnet, Zauber, Fernkampf anhand der Waffe die er trägt. 

Ich hoffe sehr das erklärt mein Problem ausführlich und es findet sich jemand der mich versteht und eine Lösung für mich hat. ich bin leider nicht so der gute Erklärer darum weiß ich nicht ob ich es ausführlich genug erklärt habe.. 

der Charakter ist übrigens kostenlos erhältlich: https://rvros.itch.io/

vielen Dank im vorraus

Marc

Link zu diesem Kommentar
Auf anderen Seiten teilen

1.Animation

Kommt drauf an wie aufwendig du die Animation haben möchtest .Du könntest wie du schon angedeutet hast einfach eine Animation für den Schwerthieb und wieder die selbe Animation ohne Schwert machen . Sieht je nachdem wie du es umsetzt nicht schlecht aus.

Was auch eine Möglichkeit wäre ist einen Teil zu animieren. Was ich damit meine ist das du nur die Arme animierst und diese auf einen eigenen Layer packst.

2.Logik + Erweiterbarkeit

Eine Statemachine würde ich abraten. Ich würde eine Kombination aus Vererbung und Interfaces nutzen. Du hast 1 Klasse WeaponHandler(Monobehaviour)  ,Eine Klasse von der man erbt z.B RangeWeapon(Monobehaviour) und ein Interface IWeapon mit der Methode Use() oder so.

WeaponHandler

Diese Klasse ist für die Auswahl der Waffen und den Input verantwortlich. Und benutzt die Methoden des Interfaces IWeapon. Ich würde jede Waffe als Gameobject implementieren das am Spieler hängt. Aber kommt natürlich drauf an wie du das haben möchtest.

Rangedweapon

Von dieser Klasse können alle deine Fernkampfwaffen erben. Zum Beispiel hat die Klasse eine Methode ShootProjektile(Gameobject projektile,float speed,int damage) etc. . Erstellst du jetzt eine Klasse Bogen kann diese von RangedWeapon erben und IWeapon implementieren. In Use() legst du fest wie der Damage berechnet wird bzw kannst du die Methode ShootProjektile() mit anderen Parametern ausführen. So kannst du so viele Fernkampfwaffen erstellen wie du möchtest.

Das selbe kannst du mit Nahkampfwaffen etc machen.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...