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 / 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.

challenge icon

Görev

Kolay

Boat.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, height birim yukarı ve aşağı, kendi speed değ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 her interval saniyede 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;
        }
    }
}
quiz iconKendini test et

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