Toimintokartan määrittäminen dynaamisesti
Varmennusympäristö
- Windows
-
- Windows 11
- Unity-editori
-
- 2020.3.25F1
- Syöttöjärjestelmän paketti
-
- 1.2.0
Tämän vinkin edellytykset
Seuraavat asetukset on tehty etukäteen tämän vinkin kuvauksen lähtökohtana.
Sinun tulisi myös tuntea seuraavat vinkit:
Tietoja dynaamisen toimintokartan määrityksestä
On tavallista lisätä ja asettaa toimenpidekarttoja projektiin etukäteen, Tässä tapauksessa ohjaimen painikkeiden määritykset vahvistetaan pelin suorittamisen aikana, eikä käyttäjä voi muuttaa niitä vapaasti pelin aikana. Tätä odotetaan pääasiassa peleissä, jotka vaativat avainkokoonpanoa.
Tässä vihjeessä kuvataan, miten komentosarjan toimintokartan keskeisiä määrityksiä muutetaan mielivaltaisesti.
Dynaaminen toimintakartta Muutosten käsittely
Tällä kertaa käsikirjoitus asettaa myös alustavan toimintakartan, ja keskellä oleva toimintakartan muutos tehdään myös käsikirjoituksessa. Mielestäni tätä menetelmää käytetään ladattaessa ja asetettaessa pelin käynnistyksen yhteydessä tallennettua avaimen kokoonpanoa.
Näytteen sisällön tarkoituksena on muuttaa toimintokartan näppäinmääritystä, kun painat painiketta, ja näyttää käytetty sisältö tekstinä. Painikkeiden sijoittelu ja näyttöteksti on järjestetty kuvan osoittamalla tavalla, mutta ne eivät ole kovin tärkeitä, joten sijoita ne vapaasti.
Toimintakartan alkumääritysprosessi
Luo komentosarja. Nimi on mielivaltainen, mutta tässä tapauksessa InputActionMap
se on .
Tällä kertaa kaikki prosessit kuvataan tässä, mutta varsinaisessa tuotannossa jaa ne projektin luomisen mukaan.
Skripti näyttää tältä: Luo ensin oletustoimintokartta käynnistyksen yhteydessä.
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}";
}
}
Määritä ensin luokalle niin monta toimintoa kuin InputAction
haluat toteuttaa kentällä.
Tässä valmistelemme kentät "Siirrä" ja "Hyökkäys", joita käytettiin myös edellisessä toimintakartan selityksessä.
Jos toimintojen määrä kasvaa, sinun on ilmoitettava tämä numero, mutta jos niitä on List
Dictionary
paljon, voit hallita niitä , jne.
Sitä ei käytetä täällä, mutta jos sinulla on oma InputActionMap
luokka, voit hallita sitä siellä.
Instantiation ja avaimen määritys AddBinding
alustuksen yhteydessä kutsutussa InputAction
Awake
menetelmässä suoritetaan.
Voit ajatella, mitä olet tekemässä, ohjelmana, joka lisää sidonnan toimintakartan asetusnäyttöön.
AddBinding
Metodille jne. määritetty merkkijono on sama kuin toimintokartan asetusnäytössä Polku-kohdassa näkyvä merkkijono.
Voit näyttää merkkijonon painamalla oikealla olevaa T-painiketta.
Painikkeen käytön yhteydessä kutsuttu tapahtumien käsittely on sama kuin normaalin toimintokartan komentosarjaversion käsittely. Myös takaisinsoittoprosessi ohjataan sellaisenaan.
// 操作時のイベントを設定
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}";
}
Ota käyttöön, poista käytöstä on InputAction
yksikkö, joten kuvaile niin monta toimintoa kuin haluat.
Jos se on hankala, voit hallita sitä List
jne.
private void OnEnable()
{
// オブジェクトが有効になったときにアクションマップを有効にする
MoveAction.Enable();
AttackAction.Enable();
}
Kun EventSystem
olet tallentanut komentosarjan, liitä se tekstiobjektiin ja määritä se näytettäväksi.
Suorita peli ja katso, näkyvätkö syöttötiedot. Tuloksen on oltava sama kuin toimintakartan staattisen prosessin komentosarjaversio.
Toimintakartan dynaaminen muutoskäsittely
Koska toimintakartan dynaaminen muutos tapahtuu, kun painiketta painetaan, määritä menetelmä, jota kutsutaan, kun painiketta painetaan.
OnClickButton
Toistaiseksi jätämme sen .
// 省略
public class InputActionMap : MonoBehaviour
{
// 省略
<summary>
ボタンをクリックしたときに呼ばれる。
</summary>
public void OnClickButton()
{
}
}
Määrittää painikkeen klikkaustapahtuman.
Toimintakartan uudelleenkirjoitusprosessi on seuraava:
<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" });
}
Koska jokaiselle toiminnolle ApplyBindingOverride
on annettu menetelmä, sen avaimen tai painikkeen path
polku, joka alustettiin arvoon ,
overridePath
Kirjoita ohitettavan avaimen tai painikkeen polku.
Muuten, tämä on vain korvauspolun asettaminen, joten alkuperäinen polku pysyy sellaisenaan. Vaihda esimerkiksi hyökkäystoiminnossa z-näppäin välilyöntiin. Lisäksi, jos haluat vaihtaa välilyönnistä x-näppäimeen, kuvaus korvataan z-näppäimelle välilyönnin sijaan seuraavasti.
AttackAction.ApplyBindingOverride(new InputBinding { path = "<Keyboard>/z", overridePath = "<Keyboard>/x" });
Kun olet tallentanut, suorita peli ja napsauta painiketta nähdäksesi, muuttuvatko käyttämäsi näppäimet tai painikkeet.
InputAction
Tällä kertaa muutamme toimintakarttaa sille, joka loi esiintymän ,
Graafisen käyttöliittymän toimintakartta-asetuksella luodaan myös InputAction
komentosarja, joten ota se käyttöön helposti tehtävässä.