-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Create a ScriptableObject for unit types. Use a single shared prefab for all units, and move unit-specific configuration (name, stats, icon, skills, etc.) into separate UnitTypeData ScriptableObjects.
Implement factory methods to spawn units based on their configuration, and create an initialization system to populate the scene with predefined units at startup.
✅ Что хорошо в твоём описании:
✔ Используется один общий prefab, а уникальность задаётся через ScriptableObject — это гибкий и масштабируемый подход.
✔ Упомянута фабрика — отличное решение для централизованного и безопасного создания юнитов.
✔ Упомянута инициализация сцены — означает, что система может работать автоматизировано (например, загружать волны или стартовые армии из списка).
я вижу минус в этом подходе, что я теперь не смогу удобно расставить юнитов на сцене, только через код, разве не так? как можно решить эту проблему?
Отличное замечание — и да, ты прав: когда ты уходишь от отдельных префабов в сторону единого ScriptableObject + общий prefab, ты теряешь возможность просто перетаскивать разные типы юнитов в сцену для ручной расстановки. Но это решаемо. Вот варианты:
✅ 1. Компонент-прокси на сцене: UnitPlacer
Сделай вспомогательный MonoBehaviour, который ты будешь ставить на сцену как заглушку:
csharp
Копировать
Редактировать
public class UnitPlacer : MonoBehaviour
{
public UnitTypeData unitType;
}
А при старте игры он будет спаунить нужный prefab с нужными данными:
csharp
Копировать
Редактировать
public class SceneUnitsBootstrapper : MonoBehaviour
{
void Start()
{
var placers = FindObjectsOfType();
foreach (var placer in placers)
{
var data = placer.unitType;
var go = Instantiate(data.prefab, placer.transform.position, placer.transform.rotation);
go.GetComponent().Init(data);
Destroy(placer.gameObject); // удалить заглушку
}
}
}
Плюсы:
Ты видишь расстановку в сцене.
Можно перемещать, масштабировать и вращать как обычно.
ScriptableObject отвечает только за "что это за юнит".