Naudokite lietimui optimizuotus įvesties valdiklius su ekranu

Puslapis atnaujintas :
Puslapio sukūrimo data :

Tikrinimo aplinka

Windows
  • Langai 11
"Unity" redaktorius
  • 2020.3.25f1
Įvesties sistemos paketas
  • 1.2.0

Būtinos šio patarimo sąlygos

Šie nustatymai buvo atlikti iš anksto kaip šio patarimo aprašymo prielaida.

Taip pat turėtumėte būti susipažinę su šiais patarimais:

Apie lietimo ekraną

Žaidimams žaisti dažnai naudoju klaviatūrą ar žaidimų pultą. Įrenginiuose, kuriuos galima valdyti tik liečiant, pavyzdžiui, išmaniuosiuose telefonuose, žaidimą žaisite liesdami.

"Unity" įvesties sistemos paketas naudoja ekrano valdymą, kad imituotų lietimo sąveiką taip, lyg jas valdytų valdiklis.

Prieš valdymą ekrane

Šis straipsnis yra šiek tiek ilgas, tačiau ši tema nėra tiesiogiai susijusi su ekrano valdymu. Jei įvesties sistemos paketą galite naudoti atlikdami kitus veiksmus, kad patikrintumėte įvestį, pvz., žaidimų pultą, tai gerai.

Šiame patarime sukursime veiksmų žemėlapį. Aprašoma, kaip imituoti prisilietimą prie žaidimų pulto taip, lyg su juo bendrautumėte.

Beje, jis taip pat palaiko klasių ir Gamepad klasių Keyboard naudojimo scenarijuose, o ne veiksmų žemėlapiuose, metodą. Šį kartą to nepaaiškinsiu, bet jei norite išbandyti su tomis klasėmis, galite paruošti kodą, aprašytą kitame puslapyje.

Pirmiausia įdėkite teksto objektą į drobę, kad būtų rodomos įvestys. Vėliau jutiklinį objektą pastatysime apačioje, todėl palikite šiek tiek vietos.

Pirmiausia sukurkite veiksmų žemėlapį taip: Kuriate tą patį veiksmą, kurį atlikote aprašydami veiksmų žemėlapį.

Kadangi veiksmų žemėlapio paaiškinimas nėra pagrindinis dalykas, įrišimas yra paprastas. Išsamesnės informacijos apie veiksmų žemėlapius rasite šiame puslapyje.

Šį kartą įvesties gavimas atliekamas pagal scenarijų, o ne "Siųsti pranešimus" arba "Iškviesti vienybės įvykius". Tai taip pat neapsiriboja scenarijais ir veikia tinkamai, net jei naudojate "Siųsti pranešimus" ir pan.

Įsitikinkite, kad sugeneravote kodą iš veiksmų žemėlapio.

Scenarijus atrodo taip: Tai beveik tas pats, kas aiškinant veiksmų žemėlapį.

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputActionScript : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>アクションマップから自動生成されたクラス。</summary>
  private InputActionSample _actionMap;

  private void Awake()
  {
    // 各操作を行ったときに呼ばれるイベントを設定する
    _actionMap = new InputActionSample();
    _actionMap.Action2D.Move.performed += context => OnMove(context);
    _actionMap.Action2D.Attack.performed += context => OnAttack(context);
    _actionMap.Action2D.Move.canceled += context => OnMove(context);
    _actionMap.Action2D.Attack.canceled += context => OnAttack(context);
  }

  private void OnEnable()
  {
    // このオブジェクトが有効になったときにアクションマップを有効にする
    _actionMap.Enable();
  }

  private void OnDisable()
  {
    // このオブジェクトが無効になったときにアクションマップが余計な動作を起こさないように無効にする
    _actionMap.Disable();
  }

  /// <summary>
  /// Move 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnMove(InputAction.CallbackContext context)
  {
    // Move の入力量を取得
    var vec = context.ReadValue<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Attack 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnAttack(InputAction.CallbackContext context)
  {
    // Attack ボタンの状態を取得
    var value = context.ReadValueAsButton();
    TextObject.text = $"Attack:{value}\n{TextObject.text}";
  }
}

Scenarijus EventSystem pridedamas prie .

Paleiskite žaidimą, kad pamatytumėte, ar jis veikia kaip veiksmų žemėlapis.

Mygtukas ekrane

Ekrano mygtukas imituoja žaidimų pulto mygtukų, pvz., A ir B, ir klaviatūros klavišų paspaudimą, kai paliečiate kokį nors objektą ekrane. Beje, sakoma liesti, bet jis taip pat veikia su pelės paspaudimais.

Pirmiausia padėkite mygtuką ekrane. Kadangi ką tik pridedate komponentą, jis veikia su kitais objektais nei mygtukai.

Iš komponento pridėkite įvesties > ekrano mygtuką.

Nustatykite žaidimų pulto mygtuką į rytus nuo valdymo kelio. Dėl to atrodo, kad "Gamepad" mygtukas "East" buvo paspaustas palietus.

Įsitikinkite, kad "Attack" pasirodo, kai paleidžiate žaidimą, ir spustelėkite mygtuką. Jei tai liečiamas įrenginys, galite patvirtinti, kad jis veikia su lietimu.

Ekrano lazda

"On-Screen Stick" leidžia liečiant perkelti objektus, pvz., lazdeles. Kai judinate lazdą, galima ją imituoti taip, lyg būtumėte perkėlę žaidimų pulto lazdą. Be prisilietimo, taip pat galima jį perkelti pele.

Ekrane įdeda mygtuko objektą, kuris bus jutiklinė lazda. Čia naudojame mygtuką, tačiau jis taip pat veikia su kitais objektais nei mygtukai.

Dalyje Įtraukti komponentą pasirinkite Įvestis > Ekrano lazdelė.

Dalyje Valdymo kelias pasirinkite Gamepad LeftStick, apibrėžtą veiksmų žemėlapyje.

Paleiskite žaidimą ir pabandykite vilkti mygtuką "Stick". Mygtukai juda ratu, tarsi judindami lazdą. Žinoma, taip pat galite patikrinti, ar įvesties turinys gaunamas, kai jis veikia.

Šiuo atveju mes įdėjome mygtuką, tačiau taip pat galima padaryti jį panašų į virtualią lazdą, įdėjus apskritą rėmelį ir apvalų lazdos objektą.

Beje, šį kilnojamąjį diapazoną galima keisti "On-Screen Stick" "judėjimo diapazone".