Darbību kartes dinamiska iestatīšana
Verifikācijas vide
- Windows
-
- Operētājsistēmā Windows 11
- Vienotības redaktors
-
- 2020.3.25f1
- Ievades sistēmas pakete
-
- 1.2.0
Priekšnoteikumi šim padomam
Tālāk norādītie iestatījumi ir veikti iepriekš kā priekšnoteikums šī padoma aprakstam.
Jums jāzina arī šādi padomi:
Par dinamiskās darbības kartes konfigurāciju
Parasti projektam iepriekš pievieno un nosaka rīcības kartes, Šajā gadījumā kontroliera pogas piešķiršana tiek fiksēta spēles izpildes laikā, un lietotājs to nevar brīvi mainīt spēles laikā. Tas galvenokārt ir paredzēts spēlēm, kurām nepieciešama galvenā konfigurācija.
Šis padoms apraksta, kā skriptā patvaļīgi mainīt darbības kartes galvenos uzdevumus.
Dinamiskās darbības kartes izmaiņu apstrāde
Šoreiz sākotnējo darbības karti nosaka arī skripts, un skriptā tiek veikta arī darbības kartes maiņa vidū. Es domāju, ka šī metode tiek izmantota, ielādējot un iestatot galveno konfigurāciju, kas saglabāta spēles startēšanas laikā.
Parauga saturs ir mainīt darbības kartes galveno uzdevumu, nospiežot pogu, un parādīt darbināto saturu kā tekstu. Pogu izvietojums un displeja teksts ir sakārtoti tā, kā parādīts attēlā, taču tie nav ļoti svarīgi, tāpēc, lūdzu, novietojiet tos brīvi.
Darbību kartes sākotnējās konfigurācijas process
Izveidojiet skriptu. Nosaukums ir patvaļīgs, bet šajā gadījumā InputActionMap
tas ir .
Šoreiz šeit tiks aprakstīti visi procesi, bet faktiskajā ražošanā, lūdzu, sadaliet tos atbilstoši projekta izveidei.
Skripts izskatās šādi: Vispirms startēšanas laikā izveidojiet noklusējuma darbību karti.
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}";
}
}
Vispirms definējiet klasē tik daudz darbību, cik vēlaties InputAction
ieviest laukā.
Šeit mēs sagatavosim laukus "Pārvietot" un "Uzbrukt", kas tika izmantoti arī iepriekšējā darbības kartes skaidrojumā.
Ja darbību skaits palielinās, jums ir jādeklarē šis skaits, bet, ja to ir List
Dictionary
daudz, varat tās pārvaldīt ar , , utt.
Šeit tas netiek izmantots, bet, ja jums ir sava InputActionMap
klase, varat to pārvaldīt tur.
Tiek veikta momentācija un atslēgas piešķiršana AddBinding
metodē, ko InputAction
sauc par Awake
inicializāciju.
Jūs varat domāt par to, ko jūs darāt kā programmu, kas pievieno saistījumu darbību kartes iestatījumu ekrānā.
AddBinding
Metodei u.c. norādītā virkne ir tāda pati kā virkne, kas parādīta darbības kartes iestatījumu ekrānā Ceļš.
Lai parādītu rakstzīmju virkni, nospiediet pogu "T" labajā pusē.
Notikumu apstrāde, kas tiek izsaukta, kad tiek darbināta poga, ir tāda pati kā parastās darbības kartes skriptētās versijas apstrāde. Arī atzvanīšanas process tiek novirzīts tāds, kāds tas ir.
// 操作時のイベントを設定
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}";
}
Iespējot, atspējot ir InputAction
vienība, tāpēc aprakstiet tik daudz darbību, cik vēlaties.
Ja tas ir apgrūtinoši, varat to List
pārvaldīt ar utt.
private void OnEnable()
{
// オブジェクトが有効になったときにアクションマップを有効にする
MoveAction.Enable();
AttackAction.Enable();
}
Kad EventSystem
skripts ir saglabāts, pievienojiet to parādāmajam teksta objektam un konfigurējiet to.
Palaidiet spēli un pārbaudiet, vai parādās ievades informācija. Rezultātam jābūt tādam pašam kā darbības kartes statiskā procesa skriptētajai versijai.
Darbību kartes dinamisko izmaiņu apstrāde
Tā kā darbības kartes dinamiskā maiņa tiek veikta, nospiežot pogu, definējiet metodi, kas tiks izsaukta, nospiežot pogu.
OnClickButton
Pagaidām mēs to atstāsim kā .
// 省略
public class InputActionMap : MonoBehaviour
{
// 省略
<summary>
ボタンをクリックしたときに呼ばれる。
</summary>
public void OnClickButton()
{
}
}
Iestata pogas klikšķa notikumu.
Darbības kartes pārrakstīšanas process ir šāds:
<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" });
}
Tā kā katrai darbībai ir paredzēta ApplyBindingOverride
metode, atslēgas vai pogas ceļš, kas tika inicializēts uz , path
overridePath
Uzrakstiet tās atslēgas vai pogas ceļu, kuru vēlaties ignorēt.
Starp citu, tas ir tikai pārrakstīšanas ceļa iestatīšana, tāpēc sākotnējais ceļš paliek tāds, kāds tas ir. Piemēram, darbībā Attack mainiet taustiņu z uz atstarpes taustiņu. Turklāt, ja vēlaties mainīt no atstarpes uz x taustiņu, apraksts tiks pārrakstīts z taustiņam, nevis pamatojoties uz atstarpi, kā norādīts tālāk.
AttackAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/z", overridePath = "<Keyboard>/x" });
Kad esat saglabājis, palaidiet spēli un noklikšķiniet uz pogas, lai redzētu, vai taustiņi vai pogas, ar kurām mijiedarbojaties, mainās.
InputAction
Šoreiz mēs mainām rīcības karti tam, kas izveidoja gadījumu ,
Ir arī InputAction
skripts, ko ģenerē GUI darbības kartes iestatījums, tāpēc, lūdzu, ieviesiet to viegli izdarāmā.