ScriptableObject в Unity - що це і навіщо він потрібен
ScriptableObject - це спеціальний тип класів у Unity, який дозволяє зберігати дані окремо від об’єктів сцени
Простими словами: це "контейнер" для даних, який існує як окремий asset у проекті
🔹 Навіщо потрібен ScriptableObject?
Без ScriptableObject дані часто зберігають прямо у MonoBehaviour:
public class Player : MonoBehaviour
{
public int Damage = 10;
public float Speed = 5;
}
Проблеми такого підходу:
• дані дублюються
• важче налаштовувати
• складніше перевикористовувати
🔹 Як працює ScriptableObject?
Ми створюємо окремий asset з даними:
[CreateAssetMenu(menuName = "Configs/Weapon")]
public class WeaponConfig : ScriptableObject
{
public int Damage;
public float FireRate;
}
[CreateAssetMenu] додає можливість створювати asset через: Right Click → Create
🔹 Створення asset
Після створення скрипта:
• Right Click у Project
• Create → Configs → Weapon
Тепер у тебе є окремий asset з даними зброї
🔹 Використання
public class Gun : MonoBehaviour
{
[SerializeField] private WeaponConfig _config;
private void Shoot()
{
Debug.Log(_config.Damage);
}
}
Тепер зброя бере дані з ScriptableObject
🔹 Чому це круто?
Дані не дублюються: один WeaponConfig можна використовувати:
• для багатьох ворогів
• різної зброї
• різних сцен
Зручно налаштовувати: змінюєш значення в одному asset і воно змінюється всюди
Чистіший код: логіка окремо - дані окремо. Це дуже хороший підхід для архітектури
ScriptableObject - це спеціальний тип класів у Unity, який дозволяє зберігати дані окремо від об’єктів сцени
Простими словами: це "контейнер" для даних, який існує як окремий asset у проекті
🔹 Навіщо потрібен ScriptableObject?
Без ScriptableObject дані часто зберігають прямо у MonoBehaviour:
public class Player : MonoBehaviour
{
public int Damage = 10;
public float Speed = 5;
}
Проблеми такого підходу:
• дані дублюються
• важче налаштовувати
• складніше перевикористовувати
🔹 Як працює ScriptableObject?
Ми створюємо окремий asset з даними:
[CreateAssetMenu(menuName = "Configs/Weapon")]
public class WeaponConfig : ScriptableObject
{
public int Damage;
public float FireRate;
}
[CreateAssetMenu] додає можливість створювати asset через: Right Click → Create
🔹 Створення asset
Після створення скрипта:
• Right Click у Project
• Create → Configs → Weapon
Тепер у тебе є окремий asset з даними зброї
🔹 Використання
public class Gun : MonoBehaviour
{
[SerializeField] private WeaponConfig _config;
private void Shoot()
{
Debug.Log(_config.Damage);
}
}
Тепер зброя бере дані з ScriptableObject
🔹 Чому це круто?
Дані не дублюються: один WeaponConfig можна використовувати:
• для багатьох ворогів
• різної зброї
• різних сцен
Зручно налаштовувати: змінюєш значення в одному asset і воно змінюється всюди
Чистіший код: логіка окремо - дані окремо. Це дуже хороший підхід для архітектури