Использование родителей в данных
Рекомендации по работе с данными в редакторе StarCraft 2
Рекомендации по работе с данными в редакторе StarCraft 2
Если вы столкнулись с тем, что в ваших данных много повторяющихся данных, например, объекты с одинаковыми свойствами, попробуйте воспользоваться методом обобщения через родительские объекты. Это значительно упростит и ускорит работу с данными.
Шаг 1: Создание родительского объекта
Создайте шаблонный объект, который будет служить основой для всех ваших юнитов. Назовите его, например, "Standard Unit Template". В этом шаблоне соберите все общие данные, которые будут присутствовать во всех юнитах. Это могут быть:
- Стандартная панель приказов с кнопками: , , , , .
- Стандартные способности атаки, перемещения и движения.
- Дефолтная скорость перемещения и другие базовые параметры.
Шаг 2: Наследование свойств от родительского объекта
При создании новых игровых юнитов используйте этот шаблонный объект как основу. Все свойства, заданные в родительском объекте, будут автоматически наследоваться новым юнитом. При этом вы сможете добавлять уникальные свойства и изменять параметры, которые не наследуются.
Преимущества использования родительских объектов:
- Отсутствие дублирования данных: Каждый новый юнит будет использовать только уникальные данные, что исключает повторение информации.
- Упрощение работы: Все базовые свойства и параметры будут заданы один раз в родительском объекте, что упрощает их настройку и управление.
- Гибкость: Вы можете легко изменять общие свойства для всех юнитов, просто отредактировав родительский объект.
- Универсальность: Вы всё ещё сможете редактировать каждый объект индивидуально
примеры
- Как пример, можно создать общего родительского юнита, в котором будут установлены самые базовые настройки.
- Можно сделать родительского юнита для наземных единиц, наследуемый от общего родителя единиц из пункта 1, настроить в нём только то, что касается только наземных единиц (Флаги выставить, перекрываемые уровни на землю настроить, и прочее)
- Можно сделать родительского юнита для воздушных единиц, наследуемый от общего родителя единиц из пункта 1, со всеми настройками для воздушных единиц
- Всё тоже самое можно сделать для зданий, чтобы например родительский объект зданий имел в панели приказов кнопки отмены строительства, смены рабочего, и прочее.
Данные для наземных единиц
<CUnit default="1" id="CommanderGround">
<FlagArray index="ArmySelect" value="1"/>
<Speed value="2.25"/>
<Acceleration value="1000"/>
<CostCategory value="Army"/>
<AttackTargetPriority value="20"/>
<Collide index="Ground" value="1"/>
<Collide index="ForceField" value="1"/>
<Collide index="Locust" value="1"/>
<PlaneArray index="Ground" value="1"/>
<AbilArray Link="move"/>
<AbilArray Link="stop"/>
<AbilArray Link="attack"/>
<CardLayouts>
<LayoutButtons Face="MovePatrol" Type="AbilCmd" AbilCmd="move,Patrol" Row="0" Column="3"/>
<LayoutButtons Face="MoveHoldPosition" Type="AbilCmd" AbilCmd="move,HoldPos" Row="0" Column="2"/>
<LayoutButtons Face="Attack" Type="AbilCmd" AbilCmd="attack,Execute" Row="0" Column="4"/>
<LayoutButtons Face="Stop" Type="AbilCmd" AbilCmd="stop,Stop" Row="0" Column="1"/>
<LayoutButtons Face="Move" Type="AbilCmd" AbilCmd="move,Move" Row="0" Column="0"/>
</CardLayouts>
<CargoSize value="2"/>
<EditorCategories value="ObjectType:Unit,ObjectFamily:Coop"/>
<StationaryTurningRate value="990"/>
<TurningRate value="990"/>
<Fidget>
<ChanceArray index="Anim" value="33"/>
<ChanceArray index="Idle" value="33"/>
<ChanceArray index="Turn" value="33"/>
</Fidget>
</CUnit>
Данные для воздушных единиц
<CUnit default="1" id="CommanderAir">
<FlagArray index="ArmySelect" value="1"/>
<Speed value="2.25"/>
<CostCategory value="Army"/>
<AttackTargetPriority value="20"/>
<AbilArray Link="move"/>
<AbilArray Link="stop"/>
<AbilArray Link="attack"/>
<CardLayouts>
<LayoutButtons Face="MovePatrol" Type="AbilCmd" AbilCmd="move,Patrol" Row="0" Column="3"/>
<LayoutButtons Face="MoveHoldPosition" Type="AbilCmd" AbilCmd="move,HoldPos" Row="0" Column="2"/>
<LayoutButtons Face="Attack" Type="AbilCmd" AbilCmd="attack,Execute" Row="0" Column="4"/>
<LayoutButtons Face="Stop" Type="AbilCmd" AbilCmd="stop,Stop" Row="0" Column="1"/>
<LayoutButtons Face="Move" Type="AbilCmd" AbilCmd="move,Move" Row="0" Column="0"/>
</CardLayouts>
<EditorCategories value="ObjectType:Unit,ObjectFamily:Coop"/>
<StationaryTurningRate value="990"/>
<TurningRate value="990"/>
<PlaneArray index="Air" value="1"/>
<Collide index="Flying" value="1"/>
<Mover value="Fly"/>
<Height value="3.75"/>
<VisionHeight value="4"/>
</CUnit>
Данные ваших единиц, созданных по родителю
<CUnit id="Marine" parent="CommanderGround"/>
<CUnit id="Marauder" parent="CommanderGround"/>
<CUnit id="Reaper" parent="CommanderGround"/>
<CUnit id="Firebat" parent="CommanderGround"/>
<CUnit id="Medic" parent="CommanderGround"/>
<CUnit id="VikingFighter" parent="CommanderAir"/>
<CUnit id="Banshee" parent="CommanderAir"/>
<CUnit id="Battlecruiser" parent="CommanderAir"/>
<CUnit id="Medivac" parent="CommanderAir"/>
В данном примере можно наблюдать, что такие параметры, как:
- стандартные элементы управления движением (перемещение, атака, патрулирование, остановка, удержание позиции)
- Способности;
- Скорость;
- Коллизия;
- другие базовые характеристики
сосредоточены в едином родительском объекте и НЕ повторяются для всех остальных единиц.
Эта функция позволяет быстро изменять стандартные параметры для всех юнитов, чтобы они соответствовали заданным значениям. Это экономит время и упрощает процесс настройки, делая его более удобным и эффективным.
И не только такое с юнитами проворачивать можно, но и с любыми другими данными