Menggunakan kontrol input yang dioptimalkan untuk sentuhan dengan Kontrol Pada Layar

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan verifikasi

Windows
  • jendela 11
Editor Kesatuan
  • 25f1/3/2020
Paket Sistem Input
  • 1.2.0

Prasyarat untuk tip ini

Pengaturan berikut telah dibuat sebelumnya sebagai premis untuk deskripsi tip ini.

Anda juga harus terbiasa dengan tips berikut:

Mengenai Kontrol Pada Layar untuk sentuhan

Saya sering menggunakan keyboard atau gamepad untuk bermain game. Pada perangkat yang hanya dapat dioperasikan dengan sentuhan, seperti smartphone, Anda akan memainkan game dengan sentuhan.

Paket sistem input Unity menggunakan On-Screen Control untuk mensimulasikan interaksi sentuh seolah-olah dikendalikan oleh pengontrol.

Sebelum Kontrol Di Layar

Artikel ini agak panjang, tetapi topik ini tidak terkait langsung dengan Kontrol Di Layar. Jika Anda dapat menggunakan paket sistem input di langkah lain untuk memeriksa input, seperti gamepad, tidak apa-apa.

Dalam tip ini, kita akan membuat peta tindakan. Menjelaskan cara mensimulasikan menyentuh gamepad seolah-olah Anda sedang berinteraksi dengannya.

Omong-omong, ini juga mendukung metode menggunakan kelas dan Gamepad kelas dalam Keyboard skrip alih-alih peta tindakan. Saya tidak akan menjelaskannya kali ini, tetapi jika Anda ingin mencobanya dengan kelas-kelas itu, Anda dapat menyiapkan kode yang dijelaskan pada halaman berikut.

Pertama, letakkan objek teks di Canvas untuk menampilkan input Anda. Nanti, kita akan menempatkan objek sentuh di bagian bawah, jadi sisakan ruang.

Pertama, buat peta tindakan sebagai berikut: Anda membuat Tindakan yang sama seperti yang Anda lakukan saat mendeskripsikan peta tindakan.

Karena penjelasan peta aksi bukanlah hal utama, pengikatannya sederhana. Silakan merujuk ke halaman berikut untuk detail tentang peta tindakan.

Kali ini, akuisisi input dilakukan dengan skrip, bukan "Kirim Pesan" atau "Panggil Acara Unity". Ini juga tidak terbatas pada skrip, dan berfungsi dengan baik bahkan jika Anda menggunakan "Kirim Pesan" dll.

Pastikan Anda telah membuat kode dari peta tindakan.

Skripnya terlihat seperti ini: Hampir sama dengan saat menjelaskan peta aksi.

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 EventSystem dilampirkan ke .

Jalankan game untuk melihat apakah itu berfungsi sebagai peta aksi.

Tombol di Layar

Tombol Di Layar mensimulasikan penekanan tombol pada gamepad, seperti A dan B, dan tombol pada keyboard saat Anda menyentuh beberapa objek di layar. Omong-omong, ia mengatakan sentuhan, tetapi juga berfungsi dengan klik mouse.

Pertama-tama letakkan tombol di layar. Karena Anda hanya melampirkan komponen, ia bekerja dengan objek selain tombol.

Tambahkan Tombol Input > Layar dari komponen.

Atur Tombol Gamepad ke Timur dari Jalur Kontrol. Hal ini membuat seolah-olah Button East pada Gamepad ditekan saat disentuh.

Pastikan bahwa Serangan muncul ketika Anda menjalankan game dan klik tombol. Jika itu adalah perangkat yang dapat disentuh, Anda dapat mengonfirmasi bahwa itu berfungsi dengan sentuhan.

Tongkat di Layar

On-Screen Stick memungkinkan Anda memindahkan objek seperti tongkat dengan sentuhan Anda. Saat Anda memindahkan tongkat, Anda dapat mensimulasikannya seolah-olah Anda telah memindahkan stik gamepad. Selain sentuhan, juga dimungkinkan untuk memindahkannya dengan mouse.

Tempatkan objek tombol di layar yang akan menjadi tongkat sentuh. Kami menggunakan tombol di sini, tetapi juga berfungsi dengan objek selain tombol.

Di bawah Tambahkan Komponen, pilih Input > Tongkat Layar.

Dari Jalur Kontrol, pilih Gamepad LeftStick yang ditentukan di peta tindakan.

Jalankan game dan coba seret tombol Stick. Tombol-tombolnya bergerak dalam lingkaran, seolah-olah menggerakkan tongkat. Tentu saja, Anda juga dapat memeriksa apakah konten input diambil saat sedang berjalan.

Dalam hal ini, kami telah menempatkan tombol, tetapi juga memungkinkan untuk membuatnya terlihat seperti tongkat virtual dengan menempatkan bingkai melingkar dan objek tongkat bundar.

Omong-omong, rentang bergerak ini dapat diubah dalam "Rentang Gerakan" dari Tongkat Di Layar.