Girdi Eylemleri
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 47 / 60.
Tuşları teker teker sınamak, betiği klavyeye bağlar. Bunun yerine bir eylem, oyuncunun ne yaptığını belirtir; proje de hangi tuşların, çubukların ve düğmelerin bu eylemi tetiklediğini listeler. Yeni bir Unity 6 projesi, bir dizi eylemle birlikte gelir (proje genelindeki eylemler olarak ayarlanmış InputSystem_Actions varlığı); bu varlığın Player haritasında Move (WASD, ok tuşları ve oyun kumandasının sol çubuğu), Look (fare veya sağ çubuk), Attack (sol fare düğmesi ve Enter), Interact (basılı tutulan E), Crouch (C), Jump (Space ve oyun kumandasının güney düğmesi), Previous ve Next (1 ve 2) ile Sprint (Left Shift) bulunur. Bu eylemler başlangıçtan itibaren etkindir ve InputSystem.actions.FindAction("Jump") adını kullanarak bir eylemi bulur. Yandan görünen bu pençe vinci x ve y eksenlerinde hareket eder, Jump ile nesneleri yakalar:
using UnityEngine;
using UnityEngine.InputSystem;
public class ClawCrane : MonoBehaviour
{
public float speed = 3f;
private InputAction moveAction;
private InputAction jumpAction;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
jumpAction = InputSystem.actions.FindAction("Jump");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;
if (jumpAction.WasPressedThisFrame())
Debug.Log("Grab!");
}
}Eylemler Start içinde bir kez bulunur ve InputAction alanlarında saklanır. Move bir Vector2 verir: x, tuşlardaki sağ ve solu; y ise yukarı ve aşağıyı belirtir. Değer normalleştirilir; bu nedenle W ve D'ye birlikte basıldığında (1, 1) yerine (0.71, 0.71) elde edilir. Vinç yandan göründüğü için bu y değerini yükseklik olarak kullanır; yukarıdan görünen bir oyunda ise z için kullanılır. Düğme eylemleri tuşlar gibi yanıt verir: WasPressedThisFrame(), WasReleasedThisFrame() ve IsPressed(). İki hata fırlatılır: yanlış yazılmış bir ad, FindAction işlevinin null döndürmesine neden olur (ilk okumada NullReferenceException oluşur); Move üzerinde ReadValue<Vector3>() kullanmak ise bir tuşa basıldığı anda InvalidOperationException fırlatır, çünkü Move bir Vector2 barındırır.
Görev
OrtaHaritacıyı yürütün ve projenin eylemleriyle bayrak dikin.
Start()içindemoveAction,jumpActionveattackActiondeğerleriniInputSystem.actions.FindAction("Move"),"Jump"ve"Attack"ile ayarlayın.Update()içindemoveAction.ReadValue<Vector2>()değerinispeedile çarparak yürüyün; y değeri z ekseni boyunca olsun.jumpAction.WasPressedThisFrame()çağrıldığındaPlant(), Attack tuşuna basıldığında isePullUp()çağırın.
“Oyna” düğmesine basın, üç bayrak dikin ve birini sökmek için tıklayın. Ardından “Kontrol et” düğmesine basın.
Kendin dene
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Surveyor : MonoBehaviour
{
public float speed = 4f;
public int flags = 3;
public GameObject flagPrefab;
private InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// Move, Jump ve Attack eylemlerini bul
}
void Update()
{
// Move ile yürü, Jump tuşuna basıldığında Plant(), Attack tuşuna basıldığında PullUp() çağır
}
void Plant()
{
if (flags == 0) return;
Vector3 spot = new Vector3(transform.position.x, 0.75f, transform.position.z);
planted.Add(Instantiate(flagPrefab, spot, Quaternion.identity));
flags--;
Debug.Log("Flags left: " + flags);
}
void PullUp()
{
if (planted.Count == 0) return;
GameObject last = planted[planted.Count - 1];
planted.RemoveAt(planted.Count - 1);
Destroy(last);
flags++;
Debug.Log("Flags left: " + flags);
}
}
Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar3Oyun Yöneticisi
Oyunu Tek Bir Betik YönetiyorSingletonOyun DurumlarıDuruma Göre GeçişÖzet: Tur Yöneticisi6Proje: Sonsuz Koşucu
Üç ŞeritÖnümüzde Engeller9Yeni Girdi Sistemi
İki Girdi SistemiKlavye ve FareBu Karede BasıldıGirdi EylemleriTekrar: Girdi DeğişimiKendi başına pratik yap: Unity playground