Сохраняй и пробуй! Сегодня разберем как создать работающую ECS-систему с нуля. Без воды — только код и практика.
1️⃣ Создаём компоненты данных
// Компонент для хранения здоровья
public struct Health : IComponentData
{
public float Current;
public float Max;
}
// Компонент для урона
public struct Damage : IComponentData
{
public float Value;
}
2️⃣ Пишем систему обработки урона
public partial class DamageSystem : SystemBase
{
protected override void OnUpdate()
{
float deltaTime = Time.DeltaTime;
Entities
.ForEach((ref Health health, in Damage damage) =>
{
// Уменьшаем здоровье с учётом времени
health.Current -= damage.Value * deltaTime;
// Не даём упасть ниже нуля
if (health.Current < 0)
health.Current = 0;
}).ScheduleParallel();
}
}
3️⃣ Система удаления мёртвых объектов
public partial class DeathSystem : SystemBase
{
private EndSimulationEntityCommandBufferSystem _ecbSystem;
protected override void OnCreate()
{
_ecbSystem = World.GetExistingSystem<EndSimulationEntityCommandBufferSystem>();
}
protected override void OnUpdate()
{
var ecb = _ecbSystem.CreateCommandBuffer();
Entities
.WithNone<DestroyTag>()
.ForEach((Entity entity, in Health health) =>
{
if (health.Current <= 0)
{
ecb.AddComponent<DestroyTag>(entity);
}
}).Run();
}
}
public struct DestroyTag : IComponentData {}
⚡️ Что важно понять:
• Системы работают автоматически каждый кадр
•
ScheduleParallel() — запускает в несколько потоков• EntityCommandBuffer — для безопасного изменения Entities
🎯 Практический совет:
Начни с малого — создай систему вращения кубов. Потом добавь движение. Постепенно освоишь все концепции!
💬 Получилось запустить первую систему?
🔔 В следующем посте разберем JobSystem и Burst Compiler для максимальной производительности!
👉Akrus Games | Unity