Unity InputSystemでキーの割り当てを変更する方法です。今回はPlayer InputのCreate Actionsで生成されるInput ActionsのAction Maps -> Player -> Actions -> Fire に Space [Keyboard]を追加してそれを実行後にスクリプトから変更します。
パッケージマネージャーからInput Systemをインストールします。
オブジェクト(GameObject)に Player Input コンポーネントを追加します。Create ActionsボタンをクリックしてInput Actionsを作成します。inputactionsファイルを選択して Edit asset ボタンをクリックします。
Action Maps -> Player -> Actions -> Fire を選択します。All Control SchemesをKeyboardMouseに変更します。Fireの+ボタンをクリックしてAdd Bindingを選択します。PropertiesのBinding – Path をクリックします。Keyboard -> By Location of Key (Using US Layout)のSpaceを選択します。Use in Control Scheme の Keyboard&Mouseをチェックします。
スクリプトを追加、変更します。以下のように変更します。クラスの宣言は省略しています。
public PlayerInput playerInput; private InputAction fireInputAction; private InputBinding keyboardInputBinding; // Start is called before the first frame update void Start() { playerInput = GetComponent<PlayerInput>(); fireInputAction= playerInput.actions["Fire"]; // keyboardInputBinding= fireInputAction.bindings[5]; fireInputAction.ApplyBindingOverride(new InputBinding() { path = "<Keyboard>/space", overridePath = "<Keyboard>/q" }); // fireInputAction.ApplyBindingOverride(5, "<Keyboard>/q"); // keyboardInputBinding = fireInputAction.bindings[5]; } // Update is called once per frame void Update() { } public void OnMove(InputValue value) { var wasd = value.Get<Vector2>(); } public void OnLook(InputValue value) { } public void OnFire() { // Spaceキーの代わりにQキーを押すと以下のコートが実行されます }
keyboardInputBinding.path が “<Keyboard>/space” から”<Keyboard>/q” に変更されます。qは大文字、小文字どちらでも構わないようです。keyboardInputBinding.groupsはKeyboard&Mouseとなります。
ApplyBindingOverrideはInputBindingクラスを作成する方法とindexを指定する方法とあります。
ActionsのFireという名前がそのままOnFireというメソッドの名前になります。
運用としてはUIにCanvasを作成してインタラクションコンポーネントを利用して変更することになります。ほかのゲームでは左右に矢印ボタンを配置してクリックして選択したり、キー入力を受け付けたりして変更しています。
Unityの新しい入力システムInputSystemを使ってみる
https://gametukurikata.com/basic/inputsystem
こちらのサイトが参考になります。