Veri Olarak Dalgalar
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 27 / 64.
Bir seviyenin dalgaları bir listedir: üç piyade, ardından iki iri düşman, sonra bir boss. Bir düşman çıkarıcının kodunda yazıldığında, her seviyenin kendi koduna ihtiyacı olur. Veri olarak yazıldığında liste bir varlığa eklenir; her seviye için bir varlık bulunur ve tek bir düşman çıkarıcı betiği kendisine verilen varlığı okur. Her girdi bir [System.Serializable] sınıfıdır, bu nedenle varlığın Inspector'ı listeyi gösterir:
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Wave
{
public GameObject enemy;
public int count = 1;
public float spacing = 1f;
}
[CreateAssetMenu(menuName = "Game/Wave Set")]
public class WaveSet : ScriptableObject
{
public List<Wave> waves;
public float restBetweenWaves = 3f;
}Bunların hepsi WaveSet.cs adlı tek bir dosyadadır: ScriptableObject kendi adıyla bir dosyada bulunmalıdır ve düz Wave sınıfı yanında yer alabilir. Bir WaveSet varlığı seçtiğinde Inspector, Size ve Element 0, Element 1 satırlarıyla Waves'i gösterir; her satırda Enemy, Count ve Spacing bulunur. + düğmesi bir dalga ekler. Düşman çıkarıcı liste üzerinde bir coroutine içinde ilerler:
public class WaveSpawner : MonoBehaviour
{
public WaveSet waveSet;
void Start()
{
StartCoroutine(SendWaves());
}
IEnumerator SendWaves()
{
foreach (Wave wave in waveSet.waves)
{
for (int i = 0; i < wave.count; i++)
{
Instantiate(wave.enemy, transform.position, Quaternion.identity);
yield return new WaitForSeconds(wave.spacing);
}
yield return new WaitForSeconds(waveSet.restBetweenWaves);
}
Debug.Log("Last wave sent");
}
}Level1 varlığında, aralarında 0.5 saniye olan 3 piyade ve ardından 2 iri düşman bulunduğunda, piyadeler 0, 0.5 ve 1. saniyelerde gelir; son piyadeden sonraki bekleme aralığı ve 3 saniyelik dinlenme süresi uygulanır ve ilk iri düşman 4.5 saniyede gelir. Level 2'nin düşman çıkarıcısı, daha zorlu dalgalar içeren bir Level2 varlığı alır ve betik aynı kalır.
Görev
OrtaDropper'ın ritmini bir şarkı varlığına dönüştür.
DropPattern.csdosyasında, publicint lanevefloat delayalanlarına sahip bir[System.Serializable]sınıfı olanDrop'u yaz.- Altına,
[CreateAssetMenu]ve publicGameObject blockPrefab,float laneWidth,List<Drop> dropsalanlarına sahipDropPattern : ScriptableObjectyaz. Dropperiçindepublic DropPattern pattern;kullan: her düşüş içindrop.delaykadar bekle, ardından bloğu x ekseni boyuncadrop.lane * pattern.laneWidthkadar kaydırarak düşür.
“Oyna”'ya bas: dört blok düşer. Ardından “Kontrol et”'e bas.
Kendin dene
using System.Collections.Generic;
using UnityEngine;
// Drop (bir blok: bulunduğu şerit ve öncesindeki bekleme süresi) ile DropPattern (asset) buraya gelir
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground