Tegevuskaardi dünaamiline seadistamine
Kontrollimise keskkond
- Windows
-
- Windows 11
- Ühtsuse toimetaja
-
- 2020.3.25f1
- Sisendsüsteemi pakett
-
- 1.2.0
Selle näpunäite eeltingimused
Selle vihje kirjeldamise eelduseks on eelnevalt tehtud järgmised sätted.
Samuti peaksite olema tuttav järgmiste nõuandetega:
Teave dünaamilise tegevuskaardi konfiguratsiooni kohta
On tavaline, et projektile lisatakse ja seatakse tegevuskaardid ette, Sellisel juhul fikseeritakse kontrolleri nupu määramised mängu täitmise ajal ja kasutaja ei saa neid mängu ajal vabalt muuta. Seda oodatakse peamiselt mängude puhul, mis nõuavad võtme konfigureerimist.
Selles näpunäites kirjeldatakse, kuidas skriptis tegevuskaardi põhiülesandeid meelevaldselt muuta.
Dünaamiline tegevuskaardi muudatuste käsitlemine
Seekord määrab skript ka esialgse tegevuskaardi ja tegevuskaardi muutmine keskel toimub ka skriptis. Ma arvan, et seda meetodit kasutatakse mängu käivitamisel salvestatud võtmekonfiguratsiooni laadimisel ja seadistamisel.
Näidise sisu on muuta toimingukaardi põhimäärangut nupu vajutamisel ja kuvada kasutatav sisu tekstina. Nuppude paigutus ja kuvatekst on paigutatud nii, nagu joonisel näidatud, kuid need pole eriti olulised, nii et palun asetage need vabalt.
Tegevuskaardi esialgne konfiguratsiooniprotsess
Skripti loomine. Nimi on meelevaldne, kuid sel juhul InputActionMap
on see .
Seekord kirjeldatakse siin kõiki protsesse, kuid tegelikus tootmises jagage need vastavalt projekti loomisele.
Skript näeb välja selline: Esmalt looge käivitamisel vaiketoimingute kaart.
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}";
}
}
Esiteks määratlege klassis nii palju toiminguid, kui soovite InputAction
põllul rakendada.
Siin valmistame ette väljad "Liigu" ja "Rünnak", mida kasutati ka eelmises tegevuskaardi selgituses.
Kui toimingute arv suureneb, peate selle arvu deklareerima, kuid kui neid on List
Dictionary
palju, saate neid hallata , jne.
Seda siin ei kasutata, kuid kui teil on oma InputActionMap
klass, saate seda seal hallata.
Initsialiseerimisel kutsutud Awake
meetodis InputAction
viiakse läbi instantiatsioon ja võtme määramine AddBinding
.
Võite mõelda, mida teete programmina, mis lisab tegevuskaardi seadistusekraanile köite.
AddBinding
Meetodi jne jaoks määratud string on sama, mis toimingukaardi seadistuskuval Path kuvatav string.
Märgistringi kuvamiseks vajutage paremal asuvat nuppu "T".
Nupu kasutamisel kutsutav sündmusekäsitlus on sama, mis tavalise toimingukaardi skriptitud versiooni töötlemine. Tagasihelistamisprotsess suunatakse samuti ümber sellisena, nagu see on.
// 操作時のイベントを設定
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}";
}
Luba, Keela on InputAction
üksus, seega kirjeldage nii palju toiminguid kui soovite.
Kui see on tülikas, saate sellega List
hakkama jne.
private void OnEnable()
{
// オブジェクトが有効になったときにアクションマップを有効にする
MoveAction.Enable();
AttackAction.Enable();
}
Pärast EventSystem
skripti salvestamist manustage see tekstiobjektile ja konfigureerige see kuvamiseks.
Käivitage mäng ja vaadake, kas sisendteave ilmub. Tulemus peaks olema sama, mis tegevuskaardi staatilise protsessi skriptitud versioon.
Tegevuskaart Dünaamiliste muudatuste töötlemine
Kuna tegevuskaardi dünaamiline muutmine toimub nupu vajutamisel, määratlege meetod, mida nupu vajutamisel kutsutakse.
OnClickButton
Praegu jätame selle nii.
// 省略
public class InputActionMap : MonoBehaviour
{
// 省略
<summary>
ボタンをクリックしたときに呼ばれる。
</summary>
public void OnClickButton()
{
}
}
Määrab nupule klõpsamissündmuse.
Tegevuskaardi ümberkirjutamise protsess on järgmine:
<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" });
}
Kuna iga toimingu jaoks ApplyBindingOverride
on ette nähtud meetod, siis võtme või nupu tee, path
mis initsialiseeriti ,
overridePath
Kirjutage selle klahvi või nupu tee, mille soovite alistada.
Muide, see on lihtsalt ülekirjutamise tee seadmine, nii et algne tee jääb selliseks, nagu see on. Näiteks muutke rünnakutoimingus tühikuklahvi z. Lisaks, kui soovite vahetada tühikult x-klahvile, kirjutatakse kirjeldus z-klahvi jaoks üle, mitte tühiku põhjal, järgmiselt.
AttackAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/z", overridePath = "<Keyboard>/x" });
Pärast salvestamist käivitage mäng ja klõpsake nuppu, et näha, kas klahvid või nupud, millega suhtlete, muutuvad.
InputAction
Seekord muudame tegevuskaarti selle jaoks, mis lõi eksemplari ,
Samuti InputAction
on olemas skript, mis on loodud GUI tegevuskaardi seadistusega, nii et palun rakendage seda selles, mida on lihtne teha.