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.
Görev
KolayRunner, Grunt'a katılıyor: daha hızlı, daha az sağlıklı. Her tür için ayrı bir asset oluştur.
EnemyData.csiçinde, EnemyData'nın Create menüsündenTower Defense/Enemy Datamenü adıyla oluşturulabilmesini sağla vespeed(float),maxHealthvereward(int) public alanlarını ekle.Enemy.csiçinde,speedalanını EnemyData türünde birdatapublic alanıyla değiştir vedata.speedhızında ilerle.- Private bir int
healthekle veAwakeiçinde asset'inmaxHealthdeğ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
{
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.