Menu
CoddyTech

Klavye ve Fare

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 44 / 56.

Input System her cihaza bir nesne verir. Keyboard.current klavyedir ve üzerindeki her tuş, adı olan bir kontroldür: spaceKey, aKey, upArrowKey veya herhangi bir tuş için Key değeriyle Keyboard.current[Key.Space]. Mouse.current faredir; leftButton, rightButton ve position kontrollerini içerir. Bir kontrolün isPressed değeri, Input.GetKey metodunda olduğu gibi, tuş basılı tutulduğu her karede true olur. Bu denizaltı ok tuşlarıyla dalar ve su yüzüne çıkar, fare düğmesi basılı tutulurken de projektörünü yakar:

using UnityEngine;
using UnityEngine.InputSystem;

public class Submarine : MonoBehaviour
{
    public float diveSpeed = 2f;
    public Light searchlight;

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard == null) return;   // bağlı klavye yok

        if (keyboard.downArrowKey.isPressed)
            transform.position += Vector3.down * diveSpeed * Time.deltaTime;
        if (keyboard.upArrowKey.isPressed)
            transform.position += Vector3.up * diveSpeed * Time.deltaTime;

        searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
    }
}

current en son kullanılan cihazdır; kullanılabilir bir cihaz yoksa null olur: telefonda veya konsolda klavye olmayabilir ve null kontrolleri betiğin bu durumlarda hata vermesini önler. Klavyede eksenler yoktur; bu yüzden aşağı ok ve S iki ayrı tuştur: S tuşuna basıldığında da dalması gereken bir denizaltı, keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed ifadesini denetler. Mouse.current.position.ReadValue(), Input.mousePosition gibi, işaretçinin ekran piksellerindeki konumunu sol alt köşeden başlayarak bir Vector2 olarak verir.

challenge icon

Görev

Orta

Input System ile sıcak hava balonunu uçur. Betiğinde drift (2), rise (3), sink (1), groundY (2) ve balonun altındaki brülör alevi olan flame bulunur.

  • Sağ ok veya D basılı tutulduğunda balon sağa (+x yönünde) saniyede drift birim hızla sürüklenir; sol ok veya A basılı tutulduğunda sola sürüklenir.
  • Space veya sol fare düğmesi basılı tutulduğunda brülör yanar. flame'i yalnızca yanarken göster.
  • Brülör yanarken balon saniyede rise birim yükselir. Sönükken saniyede sink birim alçalır ve asla groundY değerinin altına inmez.

Keyboard.current ve Mouse.current kullan. Bu proje yeni bir Unity 6 projesi gibi ayarlanmıştır (Active Input Handling: Input System Package); bu nedenle Input sınıfı burada bir InvalidOperationException hatası verir. Play'e basıp uçur, ardından Check'e bas.

Kendin dene

using UnityEngine;
using UnityEngine.InputSystem;

public class Balloon : MonoBehaviour
{
    public float drift = 2f;
    public float rise = 3f;
    public float sink = 1f;
    public float groundY = 2f;
    public GameObject flame;

    void Update()
    {
        // Yön tuşları veya A ve D ile sürüklen, Space veya fare ile ateşle
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler