Jump to content
Unity Insider Forum

Mein neues Inputsystem


Recommended Posts

So, ich dachte, ich schreibe mal über die Fortschritte meines Inputsystems.

Motiviert ja auch irgendwie noch ein Stück, weiter zu machen :)

 

Mein Input-System hat folgende Features:

  • Nie wieder Unity Input Manager! Meine Input-Achsen und -Buttons sind ScriptableObjects.
  • Außerdem gibt's auch InputFields. Buttons geben bools, Achsen floats und Fields Vector2 zurück. Damit erspart man sich new Vector2(Input.GetAxis(...), Input.GetAxis(...)).
  • downFixed für Buttons. Input.GetButtonDown sollte man nie in FixedUpdate oder OnTriggerStay benutzen. Mit meinen Buttons ist das kein Problem.
  • XInput-Support. Endlich mal 360-Gamepad richtig nutzen. Mit Vibration und allem.
  • Keycodes eingeben? Mit String? Pah. Gutes altes Button Klicken + Taste drücken und fertig.

Codebeispiel:

public InputAxis accelerate;

void Update()
{
 rigidbody.AddForce(Vector3.forward * accelerate.value);
}

  • Ach ja, schön erweiterbar ist es auch noch. Du hast einen eigenen InputButton? Kein Problem:
    public class MyInputButton : InputButton
    {
     public override bool isPressed
     {
    get
    {
       return WoherMeinBooleanKommt();
    }
     }
    }
    


Bereits fertig:

  • Maus und Tastatur-Support
  • XInput-Support (leider natürlich nicht im WebPlayer)

Noch auf'm Plan:

  • Einfach zu benutzendes Input-Optionsmenü für Ingame. Den Unity Launcher benutzt man ja dann nicht mehr :)
  • Kleine Verbesserungen hier und da... wie immer

Wird schwierig:

  • RawInput-Controller, also alle anderen als den 360-Controller, vernünftig umsetzen. Das wird schwer bis gar nicht Cross Compilen und höchst wahrscheinlich nicht im Webplayer laufen. Ich hab ja schon beim Mausrad Kompromisse gemacht. Wird da vermutlich ähnlich sein.

Was ich mich frage: Wie sind die Inputsysteme so, die es im Asset Store bereits gibt?

Hat da jemand Erfahrungen gemacht? Klingt meine Beschreibung soweit interessant?

Ansonsten poste ich hier einfach Updates :)

bearbeitet von Sascha
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab leider keine Erfahrung was die input Systeme angeht, aber je einfacher ich das Zeugs verwenden kann umso besser. Deswegen ein paar Fragen und/oder Anregungen dazu.

 

Ich sehe an deinem beispiel dass ich ein ScriptableObjekt als public Variable haben muss die ich dann wohl per Inspektor zuweisen muss. Planst du da auch was anderes. Hast du dann auch ein paar beispiele dazu? SaschasInputSystem.GetAxis(...) : Vector3

 

Ich stehe unheimlich auf so wenig wie möglich selbst machen und einfach nur verwenden, daher: Als Anregung:

 

[MapKey("Fire", KeyState.Press)]
private bool shouldFire;

[MapAxis("SomeAxis")]
private Vector2 moveVector;

void Update()
{
 if(shouldFire)
   Fire();
 Move(moveVector);
}

 

Wäre praktisch wenn es solche Automatismen gäbe, zumindest aus meiner Sicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Marrrk: Ouh, Annotations. Das sieht unheimlich sexy aus :)

Allerdings passt das so gar nicht ins aktuelle Konzept. Vielleicht bastele ich irgendwann noch eines, dann würde ich das damit ausprobieren wollen.

Ich finde den Umweg über ScriptableObjects aber auch ganz gut, da es die Input-Verknüpfungen aus dem Code zieht und keine Strings benutzt.

.....aber klasse aussehen tut deins ja :D

 

Was ich noch überlegt hatte, sind implicits. Also statt axis.value einfach nur noch axis. Werde ich vermutlich einbauen.

 

@Schlumpf:

  1. Joa, kein Ding.
  2. Dafür habe ich schon eine besondere Art von InputFoo-ScriptableObjects. Man erzeugt zwar ziemlich viele ScriptableObjects bei der Angelegenheit (bei deinem Beispiel die beiden Buttons + das eine, das beide vereint), aber dafür sind die viel leichter zu editieren als mit Unitys Input Manager.
  3. Das geht schon :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

dann würde ich mir auf jeden fall ein vorstellungsvideo wünschen vor dem kauf im store

 

nice 2 have 4 : die settings deines inputsystem local speichern anbieten ( dem spieleersteller ) alla : if xml = true syste.io.file.write

das beim nächsten start der spieler ( wenn der spielersteller das aktiviert ) die selben settings hat wie beim letzten spielen

 

1 save settings on change als boolean

2 load settings on change als boolean

3 ne möglichkeit für den spieler alle settings auf "standard" zu setzen > standard settings

festlegbar

bearbeitet von Schlumpf
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

Wird Dein System ähnlich dem bereits zu bekommenden CInput sein, oder planst Du etwas tiefgründiger vorzugehen, sodass man als Spieler tatsächlich in der Lage sein wird, seine Wunschtasten zu belegen?

 

CInput ist zwar schon recht Umfangreich, aber an richtigen Stellen, die falschen Belegungen hinterlegt und das wars dann. Ich glaub ich warte dann lieber auf Dein Projekt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wegen solcher Vergleiche habe ich nach Kenntnissen zu anderen Systemen gefragt - ich habe keine Ahnung, wie CInput funktioniert :)

Kannst du da ein bisschen was darüber sagen?

 

Ich habe in letzter Zeit extrem viel Web programmiert und bin mit meinem Input nicht weiter gekommen, aber anich ist es so gut wie fertig, wenn auch nicht feature complete. Tastatur, Maus und 360-Controller gehen halt wunderbar. Für den Upload von Version 1 fehlt primär die Doku dazu.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also CInput wirbt auf ihrer Homepage mit diesen Sachen:

 

Some features worth mentioning:

+ Supports modifier keys!

+ Compatible with Android, iOS, and Flash.

+ Customize input configuration at runtime.

+ Very easy to setup.

+ Works in the same way as the Input class.

+ Optional, adjustable built-in gui menu.

+ Accepts joysticks, steering wheels, etc.

+ Also works for webplayer builds.

+ Full source code.

 

 

könntest du dir doch kaufen und den Quellcode anschauen wie sie das mit dem Webplayer hinbekommen haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Joa, wenn ich Lust hätte, dafür Geld auszugeben ^^

Mein System läuft ja schon einmal nicht wie das default-System. Kann man natürlich als Vor- oder als Nachteil sehen :)

Mein System läuft auch im Webplayer, nur halt XInput nicht. XInput haben sie ja nicht einmal drin.

 

Muss mal schauen, ob ich da damnächst weiter dran arbeiten kann.

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...