Dinamično nastavitev akcijskega zemljevida
Okolje za preverjanje
- Windows
-
- Windows 11
- Urejevalnik enotnosti
-
- 2020.3.25f1
- Paket vhodnega sistema
-
- 1.2.0
Predpogoji za to konico
Naslednje nastavitve so bile vnaprej narejene kot predpostavka za opis tega namiga.
Seznaniti se morate tudi z naslednjimi nasveti:
O konfiguraciji dinamičnega zemljevida dejanj
V projekt je običajno vnaprej dodajati in nastaviti akcijske zemljevide, V tem primeru so dodelitve gumbov krmilnika določene med igro in jih uporabnik med igro ne more prosto spremeniti. To se pričakuje predvsem za igre, ki zahtevajo konfiguracijo ključa.
Ta namig opisuje, kako poljubno spremeniti ključne dodelitve akcijskega zemljevida v skriptu.
Dinamično ravnanje z zemljevidom dejanj
Tokrat je začetni akcijski zemljevid nastavljen tudi po skriptu, sprememba akcijskega zemljevida na sredini pa je narejena tudi v skriptu. Mislim, da se ta metoda uporablja pri nalaganju in nastavitvi konfiguracije ključa, shranjene ob zagonu igre.
Vsebina vzorca je, da spremenite dodelitev ključa na akcijski zemljevid, ko pritisnete gumb in prikažete upravljano vsebino kot besedilo. Namestitev gumba in besedilo prikaza sta urejena, kot je prikazano na sliki, vendar nista zelo pomembna, zato jih prosimo, da jih prosto postavite.
Postopek začetne konfiguracije akcijskega zemljevida
Ustvarite skript. Ime je samovoljno, v tem primeru InputActionMap
pa je .
Tokrat bodo tukaj opisani vsi postopki, vendar jih v dejanski proizvodnji razdelite glede na oblikovanje projekta.
Scenarij izgleda takole: Najprej ustvarite privzeti akcijski zemljevid ob zagonu.
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class InputActionMap : MonoBehaviour
{
<summary>情報を表示させるテキストオブジェクト。</summary>
[SerializeField] private Text TextObject;
<summary>Move アクション用の定義。</summary>
public InputAction MoveAction { get; set; }
<summary>Attack アクション用の定義。</summary>
public InputAction AttackAction { get; set; }
private void Awake()
{
// Move アクションの作成
MoveAction = new InputAction("Move");
// バインド(キー割り当て)の追加
// 設定する文字列の形式はアクションマップ設定画面の Path に表示される文字列となる
MoveAction.AddBinding("<Gamepad>/leftStick");
// キーボードに上下左右を割り当てるにはコンポジットの 2DVector を設定する
MoveAction.AddCompositeBinding("2DVector")
.With("Up", "<Keyboard>/upArrow")
.With("Down", "<Keyboard>/downArrow")
.With("Left", "<Keyboard>/leftArrow")
.With("Right", "<Keyboard>/rightArrow");
// Attack アクションの作成
AttackAction = new InputAction("Attack");
// バインド(キー割り当て)の追加
AttackAction.AddBinding("<Gamepad>/buttonSouth");
AttackAction.AddBinding("<Keyboard>/z");
// 操作時のイベントを設定
MoveAction.performed += context => OnMove(context);
MoveAction.canceled += context => OnMove(context);
AttackAction.performed += context => OnAttack(context);
AttackAction.canceled += context => OnAttack(context);
}
private void OnEnable()
{
// オブジェクトが有効になったときにアクションマップを有効にする
MoveAction.Enable();
AttackAction.Enable();
}
private void OnDisable()
{
// アクションマップが誤動作しないようにオブジェクト終了時に無効にする
MoveAction.Disable();
AttackAction.Disable();
}
<summary>
Move 操作を行ったときに呼ばれる。
</summary>
<param name="context">コールバック内容。</param>
public void OnMove(InputAction.CallbackContext context)
{
var vec = context.ReadValue<Vector2>();
TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
}
<summary>
Move 操作を行ったときに呼ばれる。
</summary>
<param name="context">コールバック内容。</param>
public void OnAttack(InputAction.CallbackContext context)
{
var value = context.ReadValueAsButton();
TextObject.text = $"Attack:{value}\n{TextObject.text}";
}
}
Najprej določite toliko dejanj v InputAction
razredu, kot jih želite izvajati v polju.
Tukaj bomo pripravili polja za "Move" in "Attack", ki so bila uporabljena tudi v prejšnji razlagi akcijskega zemljevida.
Če se število dejanj poveča, morate to številko prijaviti, List
Dictionary
če pa jih je veliko, jih lahko upravljate z , itd.
Tu ga ne uporabljate, InputActionMap
če pa imate svoj razred, ga lahko tam upravljate.
Izvede se vnašanja AddBinding
in InputAction
Awake
dodelitev ključa v načinu, imenovanem ob inicializaciji.
To, kar počnete, lahko pomislite kot na program, ki doda vezavo na zaslonu nastavitve akcijskega zemljevida.
AddBinding
Niz, določen za Metodo itd., je enak nizu, prikazanem v poti na zaslonu nastavitve akcijskega zemljevida.
Če želite prikazati niz znakov, pritisnite gumb "T" na desni strani.
Ravnanje z dogodki, poklicano ob uporabi gumba, je enako obdelavi skriptne različice običajnega akcijskega zemljevida. Tudi postopek povratnega klica je preusmeren.
// 操作時のイベントを設定
MoveAction.performed += context => OnMove(context);
MoveAction.canceled += context => OnMove(context);
AttackAction.performed += context => OnAttack(context);
AttackAction.canceled += context => OnAttack(context);
<summary>
Move 操作を行ったときに呼ばれる。
</summary>
<param name="context">コールバック内容。</param>
public void OnMove(InputAction.CallbackContext context)
{
var vec = context.ReadValue<Vector2>();
TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
}
Omogoči, Onemogoči je enota InputAction
, zato opišite toliko dejanj, kot želite.
Če je težavno, ga lahko upravljate List
z itd.
private void OnEnable()
{
// オブジェクトが有効になったときにアクションマップを有効にする
MoveAction.Enable();
AttackAction.Enable();
}
Ko skript EventSystem
shranite, ga priložite in konfigurirajte besedilni predmet za prikaz.
Zaženite igro in preverite, ali se prikažejo vhodni podatki. Rezultat mora biti enak skriptni različici statičnih procesov akcijskega zemljevida.
Obdelava dinamičnih sprememb na zemljevidu dejanja
Ker se dinamična sprememba akcijskega zemljevida opravi, ko pritisnete gumb, določite način, ki se bo imenoval, ko pritisnete gumb.
OnClickButton
Za zdaj ga bomo pustili kot.
// 省略
public class InputActionMap : MonoBehaviour
{
// 省略
<summary>
ボタンをクリックしたときに呼ばれる。
</summary>
public void OnClickButton()
{
}
}
Nastavitev dogodka klika za gumb.
Postopek prepisovanja akcijskega zemljevida je naslednji:
<summary>
ボタンをクリックしたときに呼ばれる。
</summary>
public void OnClickButton()
{
TextObject.text = "アクションマップを変更しました。";
// Move アクションのキーを置き換える
MoveAction.ApplyBindingOverride(new InputBinding { path = "<Gamepad>/leftStick", overridePath = "<Gamepad>/dpad" } );
MoveAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/upArrow", overridePath = "<Keyboard>/w" });
MoveAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/downArrow", overridePath = "<Keyboard>/s" });
MoveAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/leftArrow", overridePath = "<Keyboard>/a" });
MoveAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/rightArrow", overridePath = "<Keyboard>/d" });
// Attack アクションのキーを置き換える
AttackAction.ApplyBindingOverride(new InputBinding { path = "<Gamepad>/buttonSouth", overridePath = "<Gamepad>/buttonEast" });
AttackAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/z", overridePath = "<Keyboard>/space" });
}
Ker je določena metoda ApplyBindingOverride
za vsako dejanje, path
je pot ključa ali gumba, ki je bil inicializiran na ,
overridePath
Napišite pot ključa ali gumba, ki ga želite preglasiti.
Mimogrede, to je samo nastavitev poti prepisovanja, tako da prvotna pot ostane taka, kot je. V dejanju Napad na primer spremenite tipko z v preslednico. Poleg tega, če želite spremeniti iz prostora v x ključ, bo opis prepisano za tipko z namesto na podlagi prostora, kot sledi.
AttackAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/z", overridePath = "<Keyboard>/x" });
Ko shranite, zaženite igro in kliknite gumb, da preverite, ali tipke ali gumbi, ki jih interakcijo s spremembo.
InputAction
Tokrat spreminjamo akcijski zemljevid za tisti, ki je ustvaril primerek ,
Obstaja tudi skript, InputAction
ki ga ustvari nastavitev akcijskega zemljevida GUI, zato ga prosimo, da ga izvajate v tisti, ki je enostaven za narediti.