Menu
CoddyTech

Klavye ve Fare

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

Input System her aygıta bir nesne verir. Keyboard.current klavyedir ve üzerindeki her tuş, adı olan bir denetimdir: spaceKey, aKey, upArrowKey veya herhangi bir tuş için Key değeriyle Keyboard.current[Key.Space]. Mouse.current fareyi temsil eder; leftButton, rightButton ve position özelliklerine sahiptir. Bir denetimin isPressed özelliği, basılı tutulduğu her karede true olur; tıpkı Input.GetKey gibi. Bu denizaltı ok tuşlarıyla dalar ve su yüzüne çıkar, fare düğmesi basılı tutulurken de arama ışığı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 aygıttır ve aygıt yoksa null olur: telefonda veya konsolda klavye olmayabilir ve null denetimleri betiğin bu durumda hata vermesini önler. Klavyede eksenler yoktur; bu nedenle 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 koşulunu denetler. Mouse.current.position.ReadValue(), Input.mousePosition gibi, işaretçinin ekranın sol alt köşesinden itibaren piksel cinsinden konumunu bir Vector2 olarak verir.

challenge icon

Görev

Orta

Sıcak hava balonunu Keyboard.current ve Mouse.current ile uçur.

  1. rightArrowKey veya dKey isPressed olduğunda, saniyede drift birim hızla +x yönünde ilerle; leftArrowKey veya aKey olduğunda -x yönünde ilerle.
  2. bool burner, spaceKey veya leftButton basılı olduğunda etkin olur; flame.SetActive(burner); çağrısını yap.
  3. Brülör açıkken rise hızında yüksel; kapalıyken sink hızında alçal, ancak groundY değerinin altına inme.

“Oyna” düğmesine bas ve uç: yükselmek için Boşluk tuşunu veya fare düğmesini basılı tut. Ardından “Kontrol et”.

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()
    {
        // Ok tuşları veya A ve D ile sürüklen, Space veya fare ile yak
    }
}

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

Kendi başına pratik yap: Unity playground