Menu
CoddyTech

Düşman Verileri

Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 2 / 18.

Bir kule savunma oyununun düşman türleri vardır: piyadeler, hızlı koşucular, yavaş tanklar. Her piyade aynı hızda yürür ve aynı can miktarıyla oyuna başlar; bu nedenle bu değerler tek bir düşmana değil, türe aittir. Bunlar, her tür için bir tane olacak şekilde bir ScriptableObject varlığına konur ve o türdeki her düşman bu varlığa işaret eder. Varlığı değiştir, o türdeki tüm düşmanlar da onunla birlikte değişir.

Bir varlık tek bir düşmanın durumunu tutmamalıdır. Hasar almış bir piyadenin, arkasındaki piyadeden daha az canı vardır; bu nedenle varlık, bir piyadenin başladığı can miktarı olan maxHealth değerini tutar ve her düşman bunu kendi alanına kopyalar. Bir yarış oyunu da bir arabayı aynı şekilde ayırır:

[CreateAssetMenu(fileName = "NewCar", menuName = "Racing/Car Data")]
public class CarData : ScriptableObject
{
    public float topSpeed = 30f;
    public float tankSize = 50f;
}

public class Car : MonoBehaviour
{
    public CarData data;
    private float fuel;

    void Awake()
    {
        fuel = data.tankSize;
    }
}

Aynı modeldeki her araba tek bir CarData'yı paylaşır ve her biri kendi fuel değerini tüketir. Bunun yerine data.tankSize -= used yazmak, o modeldeki tüm arabaların deposunu aynı anda boşaltırdı ve Editor'da değişiklik, Play'den sonra da varlıkta kalırdı. Awake, nesne oluşturulur oluşturulmaz çalışır; böylece kopya, herhangi bir şey onu kullanamadan hazır olur.

challenge icon

Görev

Kolay

Runner, Grunt'a katılıyor: daha hızlı, daha az sağlıklı. Her tür için ayrı bir asset oluştur.

  1. EnemyData.cs içinde, EnemyData'nın Create menüsünden Tower Defense/Enemy Data menü adıyla oluşturulabilmesini sağla ve speed (float), maxHealth ve reward (int) public alanlarını ekle.
  2. Enemy.cs içinde, speed alanını EnemyData türünde bir data public alanıyla değiştir ve data.speed hızında ilerle.
  3. Private bir int health ekle ve Awake içinde asset'in maxHealth değerine ayarla.

Projede bir GruntData asset'i (hız 2, sağlık 9, ödül 5) ve bir RunnerData asset'i (hız 3.5, sağlık 5, ödül 3) bulunuyor; Inspector'da her düşmana kendine ait olan asset atanmış. Play'e basıp Runner'ın Grunt'u geçmesini izle, ardından Check'e bas.

Kendin dene

using UnityEngine;

// Daha sonra gelecek: bir düşman türünün özellikleri, bir varlık olarak.
public class EnemyData : ScriptableObject
{
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity Oyunu: Kule Savunması bölümündeki tüm dersler