Перейти к основному содержимому

Создание монстров

Это руководство охватывает всё, что нужно знать о создании и настройке видов монстров в MCE. Мы подробно разбираем ScriptableObject MonsterEntry, включая формы, варианты и расширенную настройку.

Обзор MonsterEntry​

Каждый вид монстра в MCE определяется ScriptableObject MonsterEntry. Это основное определение данных вида — оно содержит базовые характеристики, типы, способности, изучаемые приёмы, пути эволюции и визуальные ассеты.

MonsterEntry представляет вид (например, «Flameleon»), а MonsterInstance — конкретную особь (например, «Flameleon 25-го уровня игрока с такими-то IV, EV, характером и приёмами»).

Monster Creator Wizard

Мастер проходит те же шесть шагов, что и это руководство, в том же порядке: основная информация, базовые характеристики, способности и приёмы, эволюция, графика и итоговая проверка перед тем, как что-либо будет записано на диск. Ничего не создаётся до последнего шага, поэтому можно отказаться от вида, начатого по ошибке, не оставив бесхозного ассета.

Создание MonsterEntry​

Через мастер (рекомендуется)​

Самый быстрый способ создать монстра — мастер: откройте OpenMon Hub (Tools > MCE > OpenMon Hub) → вкладка Art Studio → Monster Creator.

Пошаговое описание мастера см. в руководстве Первый монстр.

Ручное создание​

  1. Щёлкните правой кнопкой в окне Project: Create > MCE > Monster Database > Monster.
  2. Назовите ассет по виду (например, Flameleon).
  3. Выберите его и настройте все поля в Inspector.

Структура MonsterEntry​

MonsterEntry — контейнер уровня вида. Фактические данные о характеристиках, типах и внешнем виде находятся внутри записей по формам.

Поля уровня вида (MonsterEntry)​

ПолеТипОписание
DexNumberuintУникальный национальный номер декса
AvailableFormsList<Form>Все формы, которые может иметь этот вид
DataByFormList<DataByFormEntry>Закрытые данные конфигурации по формам (индекс 0 = базовая форма)

Поля по формам (DataByFormEntry)​

Каждая форма в закрытом списке DataByForm хранит собственную полную копию следующего; наследования между формами нет. Список синхронизируется с AvailableForms, а запись читается через monsterEntry[form].

Идентичность​

ПолеТипОписание
CatchRatebyteБазовый коэффициент поимки (0-255). Ниже = труднее поймать
BaseExperienceuintОчки опыта, выдаваемые при победе
GrowthRateGrowthRateКривая опыта: Fast, MediumFast, MediumSlow, Slow, Erratic, Fluctuating

Типы​

ПолеТипОписание
FirstTypeMonsterTypeОсновной тип (обязателен)
SecondTypeMonsterTypeВторой тип (для одного типа задайте None)

Базовые характеристики​

Хранятся как словарь с ключом — перечислением Stat. Настраиваются в Inspector.

ПолеТипОписание
BaseStatsSerializableDictionary<Stat, byte>Словарь характеристика → значение

Награда EV​

Когда этот вид побеждён, какие EV получает победитель?

ПолеТипОписание
EVYieldList<StatByteValuePair>Награда EV по характеристикам

Способности​

ПолеТипОписание
AbilitiesList<Ability>Обычные способности (мастер заполняет до двух)
HiddenAbilitiesList<Ability>Скрытые способности

Пол и разведение​

ПолеТипОписание
HasBinaryGenderboolЕсть ли различие самец/самка
FemaleRatiofloatШанс быть самкой (0-1)
EggGroupsList<EggGroup>Группы совместимости для разведения
EggCyclesbyteШаги до вылупления (умножаются на базовое число шагов)

Структура DataByFormEntry​

MCE поддерживает несколько форм на вид (например, формы Алолы, формы Mega, сезонные варианты). Каждая форма может переопределить любые данные базового вида или все сразу.

Закрытый список DataByForm в MonsterEntry содержит по одной записи на форму:

[Serializable]
public class DataByFormEntry
{
public Form Form; // The form identifier
public MonsterType FirstType; // Type 1
public MonsterType SecondType; // Type 2
public SerializableDictionary<Stat, byte> BaseStats; // Dictionary keyed by Stat enum
public List<Ability> Abilities; // Regular abilities of this form
public List<Ability> HiddenAbilities; // Hidden abilities of this form
public Material Front; // Battle visuals (materials)
public Material Back;
// ... plus male/shiny material overrides, evolutions, breeding data
}

Настройка форм​

  1. Создайте ScriptableObject Form: Create > MCE > Monster Database > Form.
  2. Дайте ему описательное имя (например, MegaFlameleon, AlolanDiglett).
  3. Добавьте его в список AvailableForms вашего MonsterEntry. В DataByForm появится соответствующая запись DataByFormEntry.
  4. Заполните эту запись. Чтобы начать с существующей формы, а не с нуля, используйте кнопку Copy Data From Form To Form в MonsterEntry (показывается, когда у вида больше одной формы), а затем измените только то, что отличается.
Базовая форма

Первая форма в AvailableForms — базовая форма (GetFirstAvailableForm()). Не добавляйте формы-шайни в список: шайни-версия выводится из базовой формы через поле ShinyVersion у Form.

Формы и варианты​

MCE поддерживает несколько распространённых схем форм:

СхемаРеализация
Мега-эволюцияForm, помеченная как боевая форма (IsCombatForm, CombatFormType = Mega), со своим DataByFormEntry (усиленные характеристики, особый спрайт). Словарь MegaEvolutions базовой формы сопоставляет нужный Item с формой Mega Form; смену выполняет BattleManagerMegaModule сражения.
Региональные вариантыForm со своим DataByFormEntry (другие типы, характеристики, спрайты). Запись встречи выбирает, какая форма появится, через свой Form Calculator (SingleFormEncounter всегда возвращает одну форму).
Различия по полуОдна запись формы с включённым HasBinaryGender, FemaleRatio и мужскими вариантами материалов и значков (FrontMale, BackMale, IconMale, ...).
Только боевые формыБоевые формы (CombatFormType — Mega, Max или Other). Они исключаются, когда движок выбирает случайную форму для подарка или противника Башни.

Всё остальное — например, сезонные формы — это обычная дополнительная Form; когда монстр её принимает, решает ваш граф или скрипт.

Цепочки эволюции​

У каждой записи по форме (DataByFormEntry) есть список Evolutions из записей EvolutionData. Большинство встроенных типов наследуются от TargetSpeciesAndFormEvolutionData, который несёт цель эволюции:

[Serializable]
public abstract class TargetSpeciesAndFormEvolutionData : EvolutionData
{
[SerializeField] protected MonsterEntry TargetSpecies; // What it evolves into
[SerializeField] protected Form TargetForm; // Form it evolves into
[SerializeField] protected bool KeepShinyIfItIs; // Preserve shininess
// Trigger conditions are defined by the concrete class
}

Типы эволюции — обычные классы [Serializable], сериализуемые полиморфно через [SerializeReference]; это не отдельные ассеты ScriptableObject. Вы выбираете подходящий тип эволюции в Inspector (например, EvolveByLevel) и настраиваете его параметры (например, TargetLevel = 16).

Все 37 поддерживаемых типов описаны в Руководстве по эволюции.

Спрайты и материалы​

Каждому монстру нужны визуальные ассеты. Боевые изображения — это Material (боевая модель MCE рисует спрайты через флипбук-шейдер); значки и кадры мира — обычные ссылки на Sprite Unity:

АссетПолеНазначениеПримечания
FrontFront (Material)Сражение (вид противника)Пиксель-арт, точечная фильтрация
BackBack (Material)Сражение (вид игрока)Пиксель-арт, точечная фильтрация
IconIcon (Sprite)Меню, ПК, командаНебольшой значок, обычно 32x32
OverworldWorldIdleSprite*, WorldWalkingSprite* (Sprites)Система последователейОдин набор на каждое направление
Варианты шайниFrontShiny, BackShiny, IconShiny, ...Всё вышеперечисленноеПерекрашенные версии

Настройки импорта для пиксель-арта​

Для всех спрайтов монстров используйте следующие настройки импорта:

  1. Texture Type: Sprite (2D and UI)
  2. Sprite Mode: Single (или Multiple, если используется лист спрайтов)
  3. Pixels Per Unit: соответствует размеру тайла вашей игры (обычно 16 или 32)
  4. Filter Mode: Point (no filter)
  5. Compression: None
  6. Max Size: оставьте равным фактическому разрешению
Режим фильтрации

Любой режим фильтрации, кроме Point, сделает пиксель-арт размытым. Это самая частая визуальная проблема при настройке спрайтов монстров.

Тестирование вашего монстра​

После создания MonsterEntry:

  1. Database Browser -- откройте OpenMon Hub → вкладка Database → Database Browser и найдите монстра по имени или номеру декса.
  2. Validate Database -- откройте OpenMon Hub → вкладка Database → Validate Database, чтобы проверить отсутствующие ссылки.
  3. Декс в игре -- запустите игру и проверьте запись вашего монстра в MonsterDex.
  4. Дикая встреча -- добавьте монстра в WildEncountersSet и встретьте его в поле.

Пакетное создание​

Чтобы создать много монстров сразу, есть несколько вариантов:

  • Essentials Importer (редакции Indie, Pro, Source и Studio) -- импорт видов прямо из данных PBS Pokemon Essentials.
  • Создание скриптами (редакции Source и Studio) -- напишите скрипты редактора, создающие SO MonsterEntry программно.

Рекомендации​

  1. Используйте мастер для отдельных монстров. Он проверяет ваш ввод и ловит типичные ошибки.
  2. Сохраняйте уникальность номеров декса. Дубликаты вызовут сбои поиска.
  3. Задавайте разумные диапазоны характеристик. Используйте ориентиры BST из Первого монстра.
  4. Всегда назначайте спрайты. Отсутствующие спрайты будут розовыми/пурпурными в сражении и меню.
  5. Тестируйте цепочки эволюции от начала до конца. Убедитесь, что каждый вид цепочки есть в базе данных.
  6. Используйте формы умеренно. Каждая форма добавляет расход памяти на ассеты спрайтов.