Küçük Bileşenler
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 1 / 50.
Bir GameObject, bileşenlerin listesidir ve yazdığın her betik bunlardan bir tanesidir. Unity oyunları, her betiğe bir görev verilip bir nesneye birkaç betik eklenerek oluşturulur. Bir oyuncunun hareketi, ateş etmesi ve can puanları tek bir PlayerController içinde bulunabilir; ancak üç bileşen olarak, Mover, Shooter ve Health, bunların her biri başka nesnelere de eklenebilir:
public class Health : MonoBehaviour
{
public int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}- Oyuncu: Mover, Shooter, Health
- Taret: Shooter, Health
- Kasa: Health
Düz C# sınıflarıyla bunun yerine bir ağaç oluşturabilirsin: Character, ardından ShootingCharacter : Character, sonra da Player : ShootingCharacter. Bir taret ateş eder ama asla yürümez, bir kasa ise yalnızca kırılır; dolayısıyla her yeni nesne türü ağacın yeniden şekillendirilmesi anlamına gelir. Bileşenlerle yeni bir nesne türü, zaten var olan betiklerin Inspector'da bir araya getirilmiş yeni bir karışımıdır ve her betiğin burada kendine ait değerleri olabilir: bir nesnede yavaş bir Mover, diğerinde hızlı bir Mover.
Aynı nesnedeki bileşenler Transform'unu paylaşır; bu nedenle her biri yalnızca sorumlu olduğu kısmı değiştirmelidir. transform.position += kullanarak x ve z değerlerine ekleme yapan bir Mover, y değerine dokunmaz; böylece aynı nesnedeki bir Jumper yüksekliği değiştirmeye devam edebilir. Tüm konumu new Vector3(x, 0.5f, z) olarak ayarlayan bir Mover ise her karede y değerini eski haline getirir ve zıplamayı iptal eder.
Görev
KolayBoat.cs aynı anda üç iş yapıyor: oklar (Move eylemi) tekneyi yönlendiriyor, tekne dalgalar üzerinde sallanıyor ve lambası yanıp sönüyor. Ördek de sallanmalı, şamandıra ise hem sallanmalı hem de yanıp sönmeli; bu nedenle sahnede ördeğe zaten Bobber ve Blinker bileşenleri, tekneye ise üçünün de bileşenleri eklenmiş durumda. Boat.cs dosyasını bunlara ayır:
- Bobber: her nesne, başladığı yüksekliğin çevresinde,
heightbirim yukarı ve aşağı, kendispeeddeğerinde sallanır (Inspector ikisini de ayarlar). Bobber yalnızca konumun y değerini değiştirir, böylece tekne yönlendirilmeye devam edebilir. - Blinker:
lamp(bir Renderer) bileşenini herintervalsaniyede bir açıp kapatır. - Boat yalnızca yönlendirme işini sürdürür: sallanmayı ve yanıp sönmeyi, bunlara ait alanlarla birlikte sil.
Play'e bas ve tekneyi etrafta yönlendir, ardından Check'e bas.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
// Tek betik, üç görev: yönlendirme, sallanma ve yanıp sönme.
public class Boat : MonoBehaviour
{
public float speed = 3f;
public float bobHeight = 0.1f;
public float bobSpeed = 2f;
public Renderer lamp;
public float blinkInterval = 0.5f;
private InputAction moveAction;
private float startY;
private float blinkTimer;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
startY = transform.position.y;
}
void Update()
{
// yönlendirme
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;
// sallanma
Vector3 p = transform.position;
p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
transform.position = p;
// yanıp sönme
blinkTimer += Time.deltaTime;
if (blinkTimer >= blinkInterval)
{
blinkTimer -= blinkInterval;
lamp.enabled = !lamp.enabled;
}
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest