CodeBlanks Logo Icon CodeBlanks

SystemBase

SystemBase ile sistem mantığını öğrenirsin.

SystemBase nedir?

SystemBase, Unity ECS içerisinde bileşen verilerini işleyen sistemler oluşturmak için kullanılan temel sınıflardan biridir. Bir sistem, belirli bileşenlere sahip Entity nesnelerini bulup onların verileri üzerinde işlem yapabilir. Bu işlemler genellikle OnUpdate metodu içerisinde gerçekleştirilir.

using Unity.Entities;

public partial class HealthSystem : SystemBase
{
    protected override void OnUpdate()
    {
        // Sistem işlemleri
    }
}

SystemBase sınıfını kullanırken sistemin Unity ECS tarafından tanınması için gerekli yapıyı oluşturmalısın.

SystemBase ile veri işleme

Bir SystemBase sınıfı, belirli bileşenleri taşıyan Entity nesnelerini sorgulayabilir. Örneğin Entities.ForEach kullanarak Health bileşenine sahip nesnelerin sağlık değerlerini değiştirebilirsin. OnUpdate metodu, sistemin her güncelleme döngüsünde çalışacak işlemleri barındırır.

protected override void OnUpdate()
{
    Entities.ForEach((ref Health health) =>
    {
        health.Value += 1;
    }).Schedule();
}

Bu örnekte Health bileşenine sahip nesnelerin değerleri artırılır. Entities.ForEach yaklaşımı kullanılan Entities sürümüne bağlıdır.

Uygulama Skor değerini sistemle artır

ScoreSystem adında bir SystemBase sınıfı oluştur. OnUpdate metodunda Entities.ForEach kullanarak Score bileşenine sahip nesnelerin Value değerini bir artır ve işlemi Schedule ile zamanla. İşlem sırasında skor değerini önce 1 olarak ayarla ve güncelleme mesajını konsola yazdır. Score bileşeninin daha önce tanımlandığını varsay.

Başlangıç kodu

Player.cs
using Unity.Entities;

// ScoreSystem sınıfını tanımla
{
    // OnUpdate metodunu burada oluştur
    {
        // Score bileşenini işle
        // Value değerini ayarla ve artır
        // İşlemi zamanla
        // Güncelleme mesajını yazdır
    }
}

Örnek çözüm

Player.cs
using Unity.Entities;
using UnityEngine;

public partial class ScoreSystem : SystemBase
{
    protected override void OnUpdate()
    {
        Entities.ForEach((ref Score score) =>
        {
            score.Value = 1;
            score.Value += 1;
        }).Schedule();
        Debug.Log("Score updated");
    }
}

Beklenen çıktı

Score updated

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 SystemBase sınıfında sistemin güncelleme işlemleri hangi metotta gerçekleştirilir?

  • OnDisable
  • Awake
  • OnUpdate Doğru cevap
  • Start

Açıklama: OnUpdate, SystemBase sınıfının sistem güncellemesi sırasında çağrılan metodudur.

2 Sistem sınıfının temelini seç

Soru
public partial class MovementSystem : ____
Cevap
public partial class MovementSystem : SystemBase

Açıklama: SystemBase, ECS sistem sınıfının temelidir. MovementSystem bu sınıftan türetilir.

3 SystemBase öğeleri

Kavram Anlamı
SystemBase ECS sistem sınıfının temelidir
OnUpdate Sistem güncellemesini yürütür
Entities.ForEach Bileşen taşıyan nesneleri işler
Schedule İşlemi zamanlayarak çalıştırır

Uzman bölümündeki tüm dersler