Ekran Kontrolü ile dokunma için optimize edilmiş giriş kontrollerini kullanın
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.
- Klavye ile Çalışma (Giriş Sistemi Paket Sürümü)
- Gamepad ile Kontrol Etme (Giriş Sistemi Paketi Sürümü)
İ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.