Menu
CoddyTech

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.

challenge icon

Görev

Orta

Dropper'ın ritmini bir şarkı varlığına dönüştür.

  1. DropPattern.cs dosyasında, public int lane ve float delay alanlarına sahip bir [System.Serializable] sınıfı olan Drop'u yaz.
  2. Altına, [CreateAssetMenu] ve public GameObject blockPrefab, float laneWidth, List<Drop> drops alanlarına sahip DropPattern : ScriptableObject yaz.
  3. Dropper içinde public DropPattern pattern; kullan: her düşüş için drop.delay kadar bekle, ardından bloğu x ekseni boyunca drop.lane * pattern.laneWidth kadar 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

Kendi başına pratik yap: Unity playground