Neues Unity-Eingabesystem, das mehrere Ereignisse generiertC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Neues Unity-Eingabesystem, das mehrere Ereignisse generiert

Post by Anonymous »

Ich habe gerade angefangen, das nicht ganz so neue Eingabesystem von Unity zu erlernen. Wenn ich eine Taste drücke (wodurch ein UI-Element angezeigt und ausgeblendet wird), erhalte ich mehrere Tastendruckereignisse, was dazu führt, dass das UI-Element flackert (aktiv/inaktiv), während der Benutzer die Taste drückt (z. B. für einige Zeit). Mikrosekunden). Ich habe versucht, eine Lösung zu finden, die dazu führt, dass nur ein einziges Ereignis ausgelöst wird, unabhängig davon, wie lange der Benutzer die Taste gedrückt hält/auf eine Schaltfläche klickt – zum Beispiel, wenn die Taste zum ersten Mal gedrückt oder losgelassen wird. Ich habe mit den Interaktionen des Eingabesystems experimentiert (insbesondere Drücken: „Nur loslassen“ und Tippen), aber ohne Erfolg – ​​ich bekomme immer noch das Flackern. Ich habe auch über die Methode .WasPerformedThisFrame gelesen, weiß aber nicht, wie man sie verwendet.
Bei anderen Schaltflächen wie z. B. ist mir das gleiche Problem nicht aufgefallen B. die Bewegungs- und Sprungsteuerung auf dem Bildschirm, die gut funktioniert – möglicherweise, weil die Sprungtaste beispielsweise einen Sprung nur zulässt, wenn der Spieler am Boden ist..
I' Ich habe dieses Tutorial verwendet, um das neue Eingabesystem zu erlernen, und so habe ich es eingestellt ein Eingabesteuerelement-Asset erstellen und den folgenden Code in meinem InputHandler haben:

Code: Select all

public class InputHandler : MonoBehaviour
{
[SerializeField] private InputActionAsset inputControls;

[SerializeField] private string actionMapName = "Unit";
[SerializeField] private string rollup = "Rollup";

private InputAction rollupAction;

public bool RollupTriggered { get; private set; }

public static InputHandler Instance {get; private set; }

private void Awake()
{
...
rollupAction = inputControls.FindActionMap(actionMapName).Find(rollup);
RegisterInputActions();
}

void RegisterInputActions()
{
...
rollupAction.performed += context => RollupTriggered = true;
rollupAction.canceled += context => RollupTriggered = false;
}

private void OnEnable()
{
...
rollupAction.Enable();
}

private void OnDisable()
{
...
rollupAction.Disable();
}
}
Dann habe ich in meinem Player-/UI-Controller-Skript Folgendes:

Code: Select all

public class UnitController : MonoBehaviour
{
private InputHandler inputHandler;
public GameObject hudPanel;

void Update()
{
...
ShowHideHUD();
}

void ShowHideHUD()
{
if (inputHandler.RollupTriggered)
{
if (hudPanel.activeSelf)
{
hudPanel.SetActive(false);
}
else
{
hudPanel.SetActive(true);
}
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post