Menu
CoddyTech

Küçük Bileşenler

Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 1 / 64.

Bir GameObject, bileşenlerin bir listesidir ve yazdığın her betik bu bileşenlerden bir tane daha ekler. Unity oyunları, her betiğe bir görev verilip bir nesneye birkaç betik eklenerek oluşturulur. Oyuncunun hareketi, ateş etmesi ve can puanları tek bir PlayerController içinde bulunabilir; ancak bunlar Mover, Shooter ve Health adlı üç bileşen olduğunda, 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, ardından Player : ShootingCharacter. Bir taret ateş eder ama asla yürümez; bir kasa ise yalnızca kırılır. Bu yüzden her yeni nesne türü, ağacı yeniden şekillendirmek anlamına gelir. Bileşenlerle yeni bir nesne türü, Inspector'da bir araya getirilen mevcut betiklerin 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 yüzden her biri yalnızca sahip olduğu kısmı değiştirmelidir. transform.position += ile x ve z'ye ekleme yapan bir Mover, y'yi olduğu gibi bırakır; böylece aynı nesnedeki bir Jumper yüksekliği yine değiştirebilir. Konumun tamamını new Vector3(x, 0.5f, z) olarak ayarlayan bir Mover ise her karede y'yi eski hâline getirip zıplamayı iptal eder.

challenge icon

Görev

Kolay

Her betik tek bir işi yapacak şekilde Boat.cs dosyasını böl.

  1. Yukarı aşağı sallanma hareketini Bobber içine taşı: startY, Start() içinde ayarlansın; sallanma hareketi, kendine ait height ve speed kullanılarak Update() içinde gerçekleşsin.
  2. Yanıp sönme hareketini, kendine ait bir zamanlayıcıyla birlikte Blinker içine taşı.
  3. Boat içindeki bu iki işi ve bunlara ait alanları sil; böylece yalnızca tekneyi yönlendirsin.

“Oyna” düğmesine bas: ördek yukarı aşağı sallanır, şamandıra yanıp söner ve tekne yönlendirilir. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;
using UnityEngine.InputSystem;

// Tek bir betik, üç görev: yönlendirme, yukarı aşağı 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;

        // yukarı aşağı 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;
        }
    }
}

Unity'de Oyun Mimarisi bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground