Jump to content
Unity Insider Forum

Deadzone bei Controller Nutzung mit neuem Input System


Recommended Posts

Hallo,

Ich bin noch relativ neu in Unity und bin aktuell an einem 2D Plattformer am arbeiten und habe Platformen durch die man mit GamePad (Left Stick Down) durch kann. Dafür nutze ich das InputSystem wie folgt:

  Unbenannt.PNG.3723e7b10a8752adc5c027fbfe3f75a6.PNG

public class ThinPlatform : MonoBehaviour, InputManager.IPlatformsActions
{
    private InputManager input;
    private PlatformEffector2D effector;

    public float time

    private void Awake()
    {
        effector = GetComponent<PlatformEffector2D>();
        input = new InputManager();
        input.Platforms.SetCallbacks(this);
    }

    public void OnTogglePlatform(InputAction.CallbackContext context)
    {
        if (context.started)
        {
            if (effector.rotationalOffset != 180f)
            {
                effector.rotationalOffset = 180f;
                Invoke("ToggleBack", time);
            } 
        }
    }

    private void ToggleBack()
    {
        if (effector.rotationalOffset != 0f)
            effector.rotationalOffset = 0f;
    }

    private void OnEnable()
    {
        input.Platforms.Enable();
    }

    private void OnDisable()
    {
        input.Platforms.Disable();
    }
}

Wie ihr sehen könnt habe ich extra eine hohe Min-Deadzone eingestellt damit der Spieler nicht bei der kleinsten Bewegung des Sticks nach unten durch die Platform fällt. Leider übernimmt Unity diese Einstellungen nicht. egal wie sehr ich die Min/Max Werte ändere es ändert sich nichts. Zum testen nutze ich einen Xbox One Controller.

Daher meine Frage was mache ich falsch? muss man evtl im Code angeben diese Min/Max werte zu nutzen? oder woran liegt es sonst?

Was ich schon getestet habe:

  • Ich habe die Allgemeine Deadzone also für das gesamte Projekt in den Project Settings hoch gestellt. dort hat es auch funktioniert aber eben leider für alle Gamepad Stick Inputs. Auch fürs links und rechts laufen und dort möchte ich keine große Deadzone.
  • Statt dem allgemeinen Gamepad auf Xbox One Controller umgestellt.
  • Code den ich hier: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Processors.html gefunden habe aber um ehrlich zu sein verstehe ich nur die hälfte auf der Seite.

 

Vielen Dank im vorraus

Marc

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja das könnte ich machen. Der Code ist allerdings knapp 700 lines lang. daher hier nur der JSON teil im Code der für die Platformen zuständig ist:

{
            ""name"": ""Platforms"",
            ""id"": ""eab35586-2325-4aa2-aed3-6851ee75d13f"",
            ""actions"": [
                {
                    ""name"": ""TogglePlatform"",
                    ""type"": ""Button"",
                    ""id"": ""4a886440-3f8c-4311-b622-93f179958c69"",
                    ""expectedControlType"": ""Button"",
                    ""processors"": """",
                    ""interactions"": """"
                }
            ],
            ""bindings"": [
                {
                    ""name"": """",
                    ""id"": ""316f296b-929b-4917-85be-a5f7439ccd52"",
                    ""path"": ""<Keyboard>/s"",
                    ""interactions"": """",
                    ""processors"": """",
                    ""groups"": ""Keyboard and Mouse"",
                    ""action"": ""TogglePlatform"",
                    ""isComposite"": false,
                    ""isPartOfComposite"": false
                },
                {
                    ""name"": """",
                    ""id"": ""f1eb01da-d4e6-4113-acef-0b1bf3bca581"",
                    ""path"": ""<Keyboard>/downArrow"",
                    ""interactions"": """",
                    ""processors"": """",
                    ""groups"": ""Keyboard and Mouse"",
                    ""action"": ""TogglePlatform"",
                    ""isComposite"": false,
                    ""isPartOfComposite"": false
                },
                {
                    ""name"": """",
                    ""id"": ""6d2a12f3-d905-448e-8ad9-3f69b4d385b2"",
                    ""path"": ""<Gamepad>/leftStick/down"",
                    ""interactions"": """",
                    ""processors"": ""AxisDeadzone(min=0.8,max=0.925)"",
                    ""groups"": ""Gamepad"",
                    ""action"": ""TogglePlatform"",
                    ""isComposite"": false,
                    ""isPartOfComposite"": false
                }
            ]
        }

man sieht hier wenn ich das richtig verstehe alle 3 Bindings die ich für "TogglePlatform" eingerichtet habe: S-Taste, ArrowDown-Taste und Gamepad leftstick-down. wie man bei dem letzten binding erkennen kann habe ich 

""processors"": ""AxisDeadzone(min=0.8,max=0.925)""

korrekt eingestellt. genau so wie ich es online überall finde. 

Im Anhang hab ich nochmal die ganze generierte Datei drin.

InputManager.cs

Link zu diesem Kommentar
Auf anderen Seiten teilen

Boah, ich weiß schon, warum ich das Ding nicht benutze xD

Man kann das Ding auch echt kaum debuggen, da der wichtige Kram ja in der magischen Methode passiert, die in Zeile 14 aufgerufen wird.

Ich habe gerade auf Anhieb immerhin etwas gefunden, das darauf hindeutet, dass du mit dem Problem nicht alleine bist: https://forum.unity.com/threads/input-settings-deadzone-values-not-respected.723287/

Leider fällt mir sonst auch nicht sonderlich viel ein... dein Beispiel ist ja jetzt auch wirklich nicht zu abgefahren. Und es sieht alles gut und richtig aus, finde ich. Das einzige, was mir noch auffällt, ist dass deine Action nicht "Left Stick", sondern "Left Stick/Down" ist, was ja durchaus Sinn ergibt - aber vielleicht hat der Deadzone Processor damit ein Problem? Vielleicht musst du negative Werte einstellen oder so einen Blödsinn.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 17 Minuten schrieb Sascha:

Leider fällt mir sonst auch nicht sonderlich viel ein... dein Beispiel ist ja jetzt auch wirklich nicht zu abgefahren. Und es sieht alles gut und richtig aus, finde ich. Das einzige, was mir noch auffällt, ist dass deine Action nicht "Left Stick", sondern "Left Stick/Down" ist, was ja durchaus Sinn ergibt - aber vielleicht hat der Deadzone Processor damit ein Problem? Vielleicht musst du negative Werte einstellen oder so einen Blödsinn.

ja das dachte ich auch schon weil LeftStick/Down im Gegensatz zu "Axis" LefStick ja eigentlich nur ein Button Input ist. Aber dann würde es ja wie gesagt nichts ändern wenn ich die globale Deadzone ändere:

Am 30.12.2020 um 14:45 schrieb Brighthell96:

Ich habe die Allgemeine Deadzone also für das gesamte Projekt in den Project Settings hoch gestellt. dort hat es auch funktioniert aber eben leider für alle Gamepad Stick Inputs. Auch fürs links und rechts laufen und dort möchte ich keine große Deadzone.

Mir wurde gesagt dass man sich als frischer Unity Developer von Anfang an an das "neue" InputSystem gewöhnen soll, da es ja scheinbar das andere nicht mehr ewig geben wird. Nur darum benutze ich das überhaupt. Stimmt das nicht?

Jedenfalls werd ich mal weiter rumprobieren. Eventuell finde ich den Fehler irgendwie.

 

Edit: Du hattest recht. Es ist wie ich gesagt habe: LeftStick/Down wurde scheinbar behandelt wie ein normaler Button z.b. A-Button oder eine Taste an der Tastatur. Und Buttons können nunmal keine Deadzone haben. Sie sind entweder Pressed oder nicht Pressed. Als ich es auf eine 1D Axis umgestellt habe, das positive Binding (LeftStick/Up) entfernt habe und erneut eine Deadzone hinzugefügt habe hat es funktioniert.

Danke dir.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 27 Minuten schrieb Brighthell96:

Mir wurde gesagt dass man sich als frischer Unity Developer von Anfang an an das "neue" InputSystem gewöhnen soll, da es ja scheinbar das andere nicht mehr ewig geben wird. Nur darum benutze ich das überhaupt. Stimmt das nicht?

Doch doch, ist schon sinnvoll. Die Sache ist nur, dass ich mir mein eigenes geschrieben habe, als es das neue von Unity noch nicht gab. Und das Ding finde ich (semi-objektiv) immer noch besser :)

Es bräuchte aber noch mehr Polishing, um das auch für andere zu releasen. In meinen eigenen Projekten benutze ich das aber den ganzen Tag :D

vor 28 Minuten schrieb Brighthell96:

LeftStick/Down wurde scheinbar behandelt wie ein normaler Button z.b. A-Button oder eine Taste an der Tastatur. Und Buttons können nunmal keine Deadzone haben.

Beide Teile (Action ist ein Button, Buttons haben keine Deadzone) klingen sinnvoll, aber die Summe ist Käse. Schade!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...