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.
Görev
OrtaInput 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
driftbirim 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
risebirim yükselir. Sönükken saniyedesinkbirim alçalır ve aslagroundYdeğ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
}
}
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
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğ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öneticisi9Yeni Girdi Sistemi
İki Girdi SistemiKlavye ve FareBu Karede BasıldıGirdi EylemleriTekrar: Girdi Değişimi