Gunakan kawalan input dioptimumkan sentuhan dengan Kawalan Pada Skrin

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran pengesahan

Windows
  • Windows 11
Penyunting Perpaduan
  • 2020.3.25f1
Pakej Sistem Input
  • 1.2.0

Prasyarat untuk petua ini

Tetapan berikut telah dibuat terlebih dahulu sebagai premis untuk penerangan petua ini.

Anda juga harus biasa dengan petua berikut:

Perihal Kawalan Pada Skrin untuk sentuhan

Saya sering menggunakan papan kekunci atau pad permainan untuk bermain permainan. Pada peranti yang hanya boleh dikendalikan melalui sentuhan, seperti telefon pintar, anda akan memainkan permainan dengan sentuhan.

Pakej sistem input Unity menggunakan Kawalan Pada Skrin untuk mensimulasikan interaksi sentuhan seolah-olah ia dikawal oleh pengawal.

Sebelum Kawalan Pada Skrin

Artikel ini agak panjang, tetapi topik ini tidak berkaitan secara langsung dengan Kawalan Pada Skrin. Jika anda boleh menggunakan pakej sistem input dalam langkah lain untuk menyemak input, seperti pad permainan, itu baik-baik saja.

Dalam petua ini, kami akan membuat peta tindakan. Menerangkan cara mensimulasikan menyentuh pad permainan seolah-olah anda berinteraksi dengannya.

Dengan cara ini, ia juga menyokong kaedah menggunakan kelas dan kelas dalam Keyboard skrip dan Gamepad bukannya peta tindakan. Saya tidak akan menerangkannya kali ini, tetapi jika anda ingin mencubanya dengan kelas tersebut, anda boleh menyediakan kod yang diterangkan pada halaman berikut.

Mula-mula, letakkan objek teks pada Kanvas untuk memaparkan input anda. Kemudian, kami akan meletakkan objek sentuh di bahagian bawah, jadi tinggalkan sedikit ruang.

Mula-mula, buat peta tindakan seperti berikut: Anda mencipta Tindakan yang sama seperti yang anda lakukan apabila anda menerangkan peta tindakan.

Oleh kerana penjelasan peta tindakan bukanlah perkara utama, pengikatan adalah mudah. Sila rujuk halaman berikut untuk butiran mengenai peta tindakan.

Kali ini, pemerolehan input dilakukan dengan skrip dan bukannya "Hantar Mesej" atau "Acara Perpaduan Invoke". Ini juga tidak terhad kepada skrip, dan ia berfungsi dengan baik walaupun anda menggunakan "Hantar Mesej" dll.

Pastikan anda telah menjana kod daripada peta tindakan.

Skrip kelihatan seperti ini: Ia hampir sama seperti ketika menerangkan peta tindakan.

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}";
  }
}

Skrip dilampirkan EventSystem kepada .

Jalankan permainan untuk melihat sama ada ia berfungsi sebagai peta tindakan.

Butang Pada Skrin

Butang Pada Skrin mensimulasikan butang menekan pada pad permainan, seperti A dan B dan kekunci pada papan kekunci apabila anda menyentuh beberapa objek pada skrin. Dengan cara ini, ia mengatakan sentuhan, tetapi ia juga berfungsi dengan klik tetikus.

Tempat pertama butang pada skrin. Oleh kerana anda hanya melampirkan komponen, ia berfungsi dengan objek selain butang.

Tambah Butang Input > Pada Skrin daripada komponen.

Tetapkan Butang Gamepad Timur daripada Laluan Kawalan. Ini menjadikannya kelihatan seolah-olah Button East pada Gamepad ditekan apabila disentuh.

Pastikan Serangan muncul apabila anda menjalankan permainan dan klik butang. Jika ia adalah peranti yang boleh disentuh, anda boleh mengesahkan bahawa ia berfungsi dengan sentuhan.

Batang Pada Skrin

Batang Pada Skrin membolehkan anda mengalihkan objek seperti batang dengan sentuhan anda. Apabila anda menggerakkan tongkat, adalah mungkin untuk mensimulasikannya seolah-olah anda telah memindahkan batang gamepad. Selain menyentuh, ia juga mungkin untuk menggerakkannya dengan tetikus.

Meletakkan objek butang pada skrin yang akan menjadi tongkat sentuh. Kami menggunakan butang di sini, tetapi ia juga berfungsi dengan objek selain butang.

Di bawah Tambah Komponen, pilih Input > Batang Pada Skrin.

Daripada Laluan Kawalan, pilih Gamepad LeftStick yang ditakrifkan dalam peta tindakan.

Jalankan permainan dan cuba seret butang Stick. Butang bergerak dalam bulatan, seolah-olah menggerakkan kayu. Sudah tentu, anda juga boleh menyemak bahawa kandungan input diambil semasa ia berjalan.

Dalam kes ini, kami telah meletakkan butang, tetapi juga mungkin untuk menjadikannya kelihatan seperti tongkat maya dengan meletakkan bingkai bulat dan objek kayu bulat.

Dengan cara ini, julat boleh alih ini boleh diubah dalam "Julat Pergerakan" pada Batang Skrin.