【发布时间】:2022-06-22 19:41:42
【问题描述】:
我正在制作控制设置菜单以让玩家更改设置。我的控件使用新的统一输入系统制作。我已经编写了脚本来重新绑定简单的绑定,例如跳跃或使用技能。但我的动作绑定为复合 Vector2 绑定。这是我在每个重新绑定按钮上放置的重新绑定脚本:
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
using UnityEngine.EventSystems;
public class RebindButton : MonoBehaviour
{
[SerializeField] private InputActionReference inputActionRef;
[SerializeField] private TMP_Text buttonText;
private InputActionRebindingExtensions.RebindingOperation rebindingOperation;
private void Start()
{
int bindingIndex = inputActionRef.action.GetBindingIndexForControl(inputActionRef.action.controls[0]);
buttonText.text = InputControlPath.ToHumanReadableString(inputActionRef.action.bindings[bindingIndex].effectivePath,
InputControlPath.HumanReadableStringOptions.OmitDevice);
}
public void StartRebinding()
{
rebindingOperation = inputActionRef.action.PerformInteractiveRebinding()
.WithCancelingThrough("<Keyboard>/escape")
.WithControlsExcluding("Mouse")
.OnMatchWaitForAnother(0.1f)
.OnCancel(operation => FindObjectOfType<EventSystem>().SetSelectedGameObject(null))
.OnComplete(operation => RebindComplete())
.Start();
}
private void RebindComplete()
{
int bindingIndex = inputActionRef.action.GetBindingIndexForControl(inputActionRef.action.controls[0]);
buttonText.text = InputControlPath.ToHumanReadableString(inputActionRef.action.bindings[bindingIndex].effectivePath,
InputControlPath.HumanReadableStringOptions.OmitDevice);
rebindingOperation.Dispose();
FindObjectOfType<EventSystem>().SetSelectedGameObject(null);
}
}
我应该使用什么来重新绑定我的动作。现在我不能这样做,因为我不能选择 MoveUp 动作作为输入动作参考。我唯一可以选择的是整个运动。我知道我的问题的关键是绑定索引变量,但我不知道如何使此代码同时用于复合绑定和简单绑定。
我尝试使用 .withTargetBinding,但并不真正了解如何为其获取必要的 ID。
【问题讨论】:
标签: c# unity3d input inputbinding