Полезный приём для Unity: используйте ScriptableObject как централизованное хранилище данныхХотите снизить связность между компонентами, упростить балансировку и быстро менять параметры в нескольких сценах? ScriptableObject — простой и мощный инструмент для этого.
- Разделяет данные и поведение: настройки хранятся отдельно от MonoBehaviour.
- Лёгкое переиспользование: один ассет — множество объектов/сцен.
- Быстрая балансировка: правите значение в инспекторе — все ссылки обновляются.
- Меньше дублирования префабов: данные не копируются в каждый префаб.
- Хорошо сочетается с Addressables для динамической подгрузки данных.
Пример простого ScriptableObject для оружия:
using UnityEngine;
[CreateAssetMenu(fileName = "WeaponData", menuName = "Game/Data/Weapon")]
public class WeaponData : ScriptableObject {
public string weaponName;
public int damage;
public float cooldown;
}
Как использовать в компоненте:
using UnityEngine;
public class Weapon : MonoBehaviour {
public WeaponData data;
void Attack() {
Debug.Log($"Attack {data.weaponName} dmg={data.damage}");
// Реализуйте логику с использованием data.cooldown и т.д.
}
}
GameDEV #
Unity