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 to post
Share on other sites

Ich benutze das System nicht, daher hab ich keine Lösung parat, aber... das Ding generiert dir ja C#-Code, richtig? Kannst du diesen generierten Code evtl. finden und posten?

  • Like 1
Link to post
Share on other sites

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 to post
Share on other sites

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.

  • Like 1
Link to post
Share on other sites
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 to post
Share on other sites
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!

  • Like 1
Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
×
×
  • Create New...