Новая система ввода Unity, генерирующая несколько событийC#

Место общения программистов C#
Ответить
Anonymous
 Новая система ввода Unity, генерирующая несколько событий

Сообщение Anonymous »

Я только начал изучать не такую ​​уж новую систему ввода Unity. При нажатии кнопки (которая приводит к появлению и исчезновению элемента пользовательского интерфейса) я получаю несколько событий нажатия кнопок, из-за чего элемент пользовательского интерфейса мерцает (активный/неактивный), пока пользователь нажимает клавишу (например, на несколько микросекунды). Я пытался найти решение, которое вызывало бы запуск только одного события независимо от того, как долго пользователь удерживает клавишу или нажимает кнопку - например, когда клавиша первоначально нажата или отпущена. Я экспериментировал с взаимодействиями с системой ввода (в частности, нажатием: «Только отпускание» и «Нажатие»), но безуспешно — мерцание все еще наблюдается. Я также читал о методе .WasPerformedThisFrame, но не могу понять, как его использовать.
У меня не возникало такой проблемы с другими кнопками, такими как как экранные элементы управления движением и прыжком, которые работают нормально - возможно, потому, что, например, кнопка прыжка позволяет совершить прыжок только в том случае, если игрок приземлен.
I' Я использовал это руководство, чтобы изучить новую систему ввода и поэтому я настроил актив элемента управления вводом и в моем InputHandler есть следующий код:
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();
}
}

Затем в сценарии моего плеера/контроллера пользовательского интерфейса у меня есть следующее:
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);
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ple-events
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»