Ekran Kontrolü ile dokunma için optimize edilmiş giriş kontrollerini kullanın

Sayfa güncel :
Sayfa oluşturma tarihi :

Doğrulama ortamı

Windows
  • Pencereler 11
Birlik Editörü
  • 2020.3.25f1
Giriş Sistemi Paketi
  • 1.2.0

Bu ipucu için önkoşullar

Aşağıdaki ayarlar, bu ipucunun açıklaması için bir öncül olarak önceden yapılmıştır.

Aşağıdaki ipuçlarına da aşina olmalısınız:

Dokunma için Ekran Kontrolü Hakkında

Oyun oynamak için genellikle klavye veya gamepad kullanırım. Akıllı telefonlar gibi yalnızca dokunarak çalıştırılabilen cihazlarda, oyunu dokunarak oynayacaksınız.

Unity'nin giriş sistemi paketi, dokunma etkileşimlerini bir denetleyici tarafından kontrol ediliyormuş gibi simüle etmek için Ekran Kontrolü'nü kullanır.

Ekran Kontrolünden Önce

Bu makale biraz uzun, ancak bu konu doğrudan Ekran Denetimi ile ilgili değil. Giriş sistem paketini, girişi kontrol etmek için gamepad gibi diğer adımlarda kullanabiliyorsanız, sorun değil.

Bu ipucunda, bir eylem haritası oluşturacağız. Bir gamepad'e dokunmayı, onunla etkileşimde bulunuyormuşsunuz gibi simüle etmeyi açıklar.

Bu arada, eylem haritaları yerine komut dosyalarında Keyboard sınıfları ve Gamepad sınıfları kullanma yöntemini de destekler. Bu sefer açıklamayacağım ama o sınıflarla denemek isterseniz bunun yerine bir sonraki sayfada anlatılan kodu hazırlayabilirsiniz.

İlk olarak, girişlerinizi görüntülemek için Kanvas'a bir metin nesnesi yerleştirin. Daha sonra, dokunma nesnesini en alta yerleştireceğiz, bu yüzden biraz boşluk bırakın.

İlk olarak, aşağıdaki gibi bir eylem haritası oluşturun: Eylem haritasını açıklarken yaptığınız Eylemin aynısını oluşturuyorsunuz.

Eylem haritasının açıklaması ana şey olmadığından, bağlama basittir. Eylem haritaları hakkında ayrıntılar için lütfen aşağıdaki sayfaya bakın.

Bu kez, giriş alımı "Mesaj Gönder" veya "Birlik Olaylarını Çağır" yerine komut dosyası tarafından gerçekleştirilir. Bu aynı zamanda komut dosyalarıyla sınırlı değildir ve "Mesaj Gönder" vb. Kullansanız bile düzgün çalışır.

Kodu eylem haritasından oluşturduğunuzdan emin olun.

Komut dosyası şöyle görünür: Eylem haritasını açıklarken olduğu gibi neredeyse aynıdır.

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

Komut EventSystem dosyası .

Bir aksiyon haritası olarak çalışıp çalışmadığını görmek için oyunu çalıştırın.

Ekran Düğmesi

Ekran Düğmesi, A ve B gibi bir gamepad'deki düğmelere ve ekrandaki bir nesneye dokunduğunuzda klavyedeki tuşlara basmayı simüle eder. Bu arada, dokunma diyor, ama aynı zamanda fare tıklamalarıyla da çalışıyor.

İlk önce düğmeyi ekrana yerleştirin. Yalnızca bir bileşen eklediğinizden, düğmeler dışındaki nesnelerle çalışır.

Bileşenden bir Giriş > Ekran Düğmesi ekleyin.

Denetim Yolu'ndan Gamepad'in Doğu Düğmesini ayarlayın. Bu, dokunulduğunda Gamepad'deki Doğu Düğmesine basılmış gibi görünmesini sağlar.

Oyunu çalıştırdığınızda Saldırı'nın göründüğünden emin olun ve düğmeye tıklayın. Dokunulabilir bir cihazsa, dokunarak çalıştığını doğrulayabilirsiniz.

Ekran Çubuğu

Ekran Çubuğu, çubuk gibi nesneleri dokunuşunuzla hareket ettirmenizi sağlar. Bir çubuğu hareket ettirdiğinizde, bir gamepad çubuğunu hareket ettirmişsiniz gibi simüle etmek mümkündür. Dokunmaya ek olarak, fare ile hareket ettirmek de mümkündür.

Ekrana dokunmatik çubuk olacak bir düğme nesnesi yerleştirir. Burada bir düğme kullanıyoruz, ancak düğmeler dışındaki nesnelerle de çalışıyor.

Bileşen Ekle altında, Giriş > Ekran Çubuğu'nu seçin.

Denetim Yolu'ndan, eylem haritasında tanımlanan Gamepad LeftStick'i seçin.

Oyunu çalıştırın ve Çubuk düğmesini sürüklemeyi deneyin. Düğmeler, bir çubuğu hareket ettiriyormuş gibi bir daire içinde hareket eder. Tabii ki, giriş içeriğinin çalışırken getirilip getirilmediğini de kontrol edebilirsiniz.

Bu durumda, bir düğme yerleştirdik, ancak dairesel bir çerçeve ve yuvarlak bir çubuk nesnesi yerleştirerek sanal bir çubuk gibi görünmesini sağlamak da mümkündür.

Bu arada, bu hareketli aralık Ekran Çubuğunun "Hareket Aralığı" nda değiştirilebilir.