ScriptableObject (SO) — это мощный инструмент для хранения данных и логики вне GameObject.
Идеально для: настроек персонажей, информации о предметах, диалогов и любых конфигов!
🔥 Зачем использовать?
✔️ Экономия памяти – один SO может использоваться тысячами объектов
✔️ Гибкость – изменение данных без правки кода
✔️ Интеграция с Inspector – настройки как у компонентов
🛠 Основы создания
Скрипт:
using UnityEngine;
[CreateAssetMenu(fileName = "NewCharacter", menuName = "Characters/CharacterData")]
public class CharacterData : ScriptableObject {
public string characterName;
public int maxHealth;
public float moveSpeed;
}
Для создания ScriptableObject важно наследовать класс от ScriptableObject и использовать модификатор [CreateAssetMenu], указав название для создаваемых SO и положение объекта во всплывающем меню.
Создание ассета:
ПКМ в Project → Create → Characters → CharacterData
Заполните параметры в инспекторе
💡 Пример: Базовая система персонажей
1. Данные персонажа (SO)
using UnityEngine;
[CreateAssetMenu(fileName = "NewCharacter", menuName = "Characters/CharacterData")]
public class CharacterData : ScriptableObject {
public string characterName;
public int maxHealth;
public float moveSpeed;
}
2. Использование в скрипте
// PlayerController.cs
public class PlayerController : MonoBehaviour {
public CharacterData data; // Перетащите сюда SO
private int currentHealth;
void Start() {
currentHealth = data.maxHealth;
}
void Update() {
float move = Input.GetAxis("Horizontal") * data.moveSpeed;
transform.Translate(move * Time.deltaTime, 0, 0);
}
}
3. Преимущества подхода
- Можно создать разные вариации персонажей (игрок, враг, NPC) без дублирования кода - достаточно установить новый конфиг для изменения настроек персонажа.
- Баланс игры меняется без пересборки – просто редактируем SO
- Данные можно переиспользовать (например, несколько врагов с одними параметрами)
📊 Когда выбирать ScriptableObject?
1. Настройки персонажей/врагов — ✅ Идеально
2. Система диалогов/квестов — ✅ Отлично
Используя эти знания можно создавать множество конфигов с разными предустановками, чтобы в дальнейшем легко менять настройки объекта установив подходящий конфиг. Так же, это позволяет управлять настройками множества объектов, имеющих один и тот же конфиг - например, если у вас есть множество врагов одного типа и все они имеют один и тот же конфиг, то для изменения их поведения достаточно изменить данные установленного конфига.
Вдальнейшем мы напишем небольшой глоссарий, описывающий информацию о различных противниках. Ждите – следующий пост совсем скоро!
