Jump to content
Unity Insider Forum

2D Sprite Charakter mit Joystick Blickrichtung wechseln ?


Recommended Posts

Hallo Ihr Lieben,

 

ich arbeite an einem 2D Sidescroller Jump and Run, das Movement für meinen Protagonisten habe ich genauso wie in diesem Playmaker Tutorial umgesetzt:

 

Part1

Part2

 

Mittels Tastatur Eingaben Links und Rechts, wechselt mein Player wie im Tutorial die Blickrichtung (Left Arrow & Right Arrow) wie gewünscht. Alles weiter funktioniert ebenfalls einwandfrei,

 

Wenn ich nun aber den Joystick eines Gamepad verwende, ändert mein Player die Blickrichtung nicht, selbiges auch wenn ich diesen virtuellen Joystick dieses Asset für eine Touchsteuerung verwende : https://www.assetsto...!/content/42846 (Auch die WalkAnimation wird hierbei nicht abgespielt).

 

Ich habe heute vergeblich versucht hier im Forum ein Thema darüber zu finden und ich hoffe jemand kann mir einen Richtungsweisenden ;) Tipp geben wie ich dieses Problem lösen kann ?

 

Vielen Dank im Voraus !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ich nicht wusste, wie der Tutor das Event gelöst hat, habe ich mir mal einen Teil des ersten Videos angeschaut.

Ja und da ist ganz klar, warum der Player seine Blickrichtung nicht ändert. (ungefähr bei Minute 40 geht's los)

Warum der das so macht ist mir zwar schleierhaft, aber ich erkläre es dir mal.

 

Die Bewegung an sich fragt er von der horizontal Inputachse ab, aber das Ändern der Blickrichtung löst er mit GetKeyDown für left und right Arrow.

Das ist dumm, denn dann kann auch nur über die Tastatur der Player gedreht werden.

Versuch stattdessen für die Blickrichtung auch die Input Achsen zu nutzen. Am besten eigent sich dafür GetAxisRaw

 

http://docs.unity3d....GetAxisRaw.html

 

Denn dann bekommst du immer eine 0, -1 und 1 zurück, die du einfach, je nach Wert, für deine Blickrichtung nutzen kannst.

Wie du das im Playmaker umsetzt, weiss ich nicht. Sollte aber gehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe es bis jetzt nur teilweise geschafft das Problem zu lösen <_< !

 

Mit dem Playmaker Script AxisEvent (hierbei kann man links/rechts input ein event zuweisen, in diesem Fall flip left/setScale - etc) konnte ich zumindest das Problem für das Gamepad (PS3 Controller) lösen,

Walk Animation wird ebenfalls abgespielt wie sie soll.

 

Bei der Eingabe durch CnControls ist es nach wie vor möglich den Player zu steuern, die KeyButtonDown Events hab ich komplett verbannt, trotzdem ist es weiterhin möglich die Tasten links, rechts, a, d, (auch Gamepad) zu verwenden, auch hier wird nun die Walk Animation abgepielt, nur die Blickrichtung will nicht stattfinden. Ich nehme an die Tasten Steuerung greift hierbei auf die Einstellungen im Inputmanager zu ?!

 

Im Internet find ich meistens nur Infos od. Tutorials wo Rigidbody und nicht Rigidbody2D verwendet werden, vielleicht hat es etwas damit zu zun? ...ich habe auch versucht den Fehlern in den CnControls Scripten und div. anderen... (da fehlt mir leider noch Erfahrung) zu finden und ich versuch es natürlich auch weiterhin :rolleyes::lol: .

 

Ich lese immer wieder auch die Begriffe Vector2, Vector3 ?? ...aber hab noch zu wenig Ahnung von diesen Sachen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du auf unbekannte Begriffe stößt, ist er vermutlich entweder von Unity oder aus C#.

Bei ersterem findest du weitere Informationen mit der Suche hier: http://docs.unity3d.com/ScriptReference/index.html

Bei C# dagegen hat Google, wie öfter mal, den besseren Index, also einfach "C# [begriff]" eingeben und auf der richtigen Microsoft Developer Network (msdn)-Seite landen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein.

Aber das brauchst du ja auch nicht. Denn bei den Keycodes würdest du ja eh GetKeyDown nutzen, und das ist ja dann sofort ne 1.

Der Unterschied bei den Achsen (und da sind ja auch Tasten für definiert und selber einstellbar), ist ein langsames ansteigen von 0 auf 1 bzw. 0 auf -1. Es wird also ein analoges Verhalten simuliert.

 

Da der Inputmanager ja vom Spieler aus mit Tasten oder Joysticks belegt und verändert werden kann, sollte man schon die vorgefertigten Achsen mit ihrem Verhalten nutzen. Wenn dann der Spieler sagt, ich will aber nicht mit WASD sondern mit IJKM spielen, dann kann er das einfach einstellen. Trotzdem kannst du diese Tasten immer noch direkt abfragen und etwas machen (wie z.B. das drehen des Sprites oder das Starten einer Animation) sobald die Taste gedrückt wurde und nicht erst dann wenn der Mechanismus den Wert auf 1 gebracht hat.

Dafür ist GetAxisRaw da!

Schau dir nochmal den Inputmanager an. Dort sind Achsen und einzelne Tasten vordefiniert. Die kannst du erweitern, verändern und auch umbenennen. All das kannst du dem Spieler zur freien Tastenbelegung anbieten. Alles andere, was nicht änderbar sein soll, würde ich dann über GetKeyDown abfragen und nicht im Manager bestücken. Die ESC Taste wäre so eine Taste.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein.

Aber das brauchst du ja auch nicht. Denn bei den Keycodes würdest du ja eh GetKeyDown nutzen, und das ist ja dann sofort ne 1.

Der Unterschied bei den Achsen (und da sind ja auch Tasten für definiert und selber einstellbar), ist ein langsames ansteigen von 0 auf 1 bzw. 0 auf -1. Es wird also ein analoges Verhalten simuliert.

Verstehe. Für 2D Games (Jump&Run) ist GetAxisRaw() wahrscheinlich eh nicht vorteilhaft, bzw nicht in meinem Fall.

 

Da der Inputmanager ja vom Spieler aus mit Tasten oder Joysticks belegt und verändert werden kann, sollte man schon die vorgefertigten Achsen mit ihrem Verhalten nutzen. Wenn dann der Spieler sagt, ich will aber nicht mit WASD sondern mit IJKM spielen, dann kann er das einfach einstellen. Trotzdem kannst du diese Tasten immer noch direkt abfragen und etwas machen (wie z.B. das drehen des Sprites oder das Starten einer Animation) sobald die Taste gedrückt wurde und nicht erst dann wenn der Mechanismus den Wert auf 1 gebracht hat.

Dafür ist GetAxisRaw da!

Schau dir nochmal den Inputmanager an. Dort sind Achsen und einzelne Tasten vordefiniert. Die kannst du erweitern, verändern und auch umbenennen. All das kannst du dem Spieler zur freien Tastenbelegung anbieten. Alles andere, was nicht änderbar sein soll, würde ich dann über GetKeyDown abfragen und nicht im Manager bestücken. Die ESC Taste wäre so eine Taste.

Wenn ich den InputManager nicht nutzen möchte, kann ich GetAxisRaw auch nicht benutzen, richtig?

(Will ich auch gar nicht, aber ich frage nur um es zu verstehen)

Ich möchte nämlich, dass der Benutzer im Spiel (also zur Laufzeit) die Tastenbelegung ändern kann und das geht, soweit ich das richtig verstanden habe, nicht mit dem Inputmanager von Unity, richtig?

 

Kann man GetKeyDown oder andere Input-Methods für einen Joystick nutzen OHNE InputManager?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau andersherum. Du kannst den Spieler die Möglichkeit geben, die Tasten zu ändern, Das geht aber nur beim Startdialog. Du kannst nur nicht die Namen für die Dinge ändern lassen. Also Horizontal, Vertical, Fire usw. sind die Namen, die nur der Programmierer ändern kann, bzw von Unity bereit gestellt werden. Die Tastenbelegung zu diesen Namen kann der Spieler sehrwohl ändern. Genau dafür ist der Manager da.

 

Guck hier: http://docs.unity3d.com/Manual/class-InputManager.html

und hier: http://docs.unity3d.com/ScriptReference/Input.html

 

Wie oben schon geschrieben, kommt der Dialog zum Ändern nur am Anfang vor dem Spiel selbst. Wie das zur Laufzeit in einem eigenen Menü geht, weiß ich nicht, jedenfalls nicht für die Joystickachsen. Aber jemand hier aus dem Forum hat da etwas erstellt. Weiß nur nicht mehr wer das war.

Es muss also gehen, denn es gibt glaube ich auch einige Assets dazu im Assetstore.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...