Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

q3:работа_с_entities [15.09.2009 15:04]
Nt-kop4ik
q3:работа_с_entities [25.12.2012 23:56] (текущий)
Строка 1: Строка 1:
 +===== Введение =====
  
 +
 +В данной статье будет рассказано, как работать с //entity// в редакторе уровней типа GtkRadiant на примере версии 1.5.0.
 +
 +//Map//-файл, который как раз редактируется с помощью Radiant'a, описывает следущие составляющие уровня:
 +
 +  * //worldspawn// - множество всех брашей и патчей уровня, не задействованных в //trigger//'ах и //func//'ах;
 +
 +  * //entity// - этити (к примеру, target_give, item_haste и др.);
 +
 +  * //trigger// - триггер, который можно определить как симбиоз множества из брашей и/или патчей с //entity//;
 +
 +  * //func// - особая группа брашей или патчей;
 +  
 +  * //model// - модель.
 +
 +===== Создание и выделение объектов =====
 +
 +Для помещения на уровень //entity//, //trigger//'а, //модели//'и или //func//'а (далее - //объект//) кликнуть правой кнопкой мыши на рабочее пространство редактора (неважно, в какой проекции) и выбрать нужный пункт. Следует помнить, что при создании //trigger//'a или //func//'a должен быть выделен как минимум один браш или патч, иначе создастся "пустой" //trigger// или //func//, и откомпилированный с такой "пустышкой" уровень не запустится в q3. При помещении же //entity// и //модели//'и наоборот все выделения в редакторе необходимо снять, иначе то, что было выделено, исчезнет (впрочем, иногда так и надо).
 +
 +{{:q3:entity_menu.png|}}
 +
 +  * **entity меню**
 +
 +===== Entity list =====
 +
 +
 +Для управления установленными объектами редактор содержит мощные инструменты: //**entity list**// и **//entity inspector//**.
 +
 +**//Entity list//** - удобный список всех //entity// на уровне, в котором легко находить нужные из них для последующего вызова **//entity// inspector** или других целей (например, копирования). Для вызова **//entity list//** нужно выбрать соответствующую строчку меню **//view//**, либо использовать горячую клавишу **L**.
 +
 +
 +    * Примечание: горячие клавиши (в WinXP для GtkRadiant 1.5.0) можно посмотреть/поменять с помощью файла
 +
 +//SYSTEM_SECTION:\Documents and Settings\USER_NAME\Application Data\RadiantSettings\1.5.0\q3.game\shortcuts.ini//
 +
 +{{:q3:view_menu.png|}}
 +
 +  * **меню view**
 +
 +В появившемся окне можно искать нужный //объект//, а затем копировать его (клавиша **SPACE**), перемещать с помощью мыши, либо вызывать для ее редактирования **//entity inspector//**. Единственным недостатком этого инструмента является то, что в нем отображаются абсолютно все источники света, которых может быть не одна тысяча (да, бывают и такие чудовища), что очень мешает навигации в //**entity list**//.
 +
 +{{:q3:entity_list2.png|}}
 +
 +  * **entity list**
 +
 +
 +===== Entity inspector =====
 +
 +
 +Логически следующий за //**entity list**//, но хронологически вызываемый раньше инструмент //**entity inspector**// вызывается горячей клавишей **N** при условии выделенного в редакторе объекта. Если //объект// создан только что и больше действий с выделением произведено не было, то можно вызывать //**entity inspector**// сразу, т.к. после создания любого объекта (в том числе браша или патча) выделение автоматически переходит на него. Если же надо выделить //объект// уже после, нужно выделить его с помощью левой кнопки мыши и клавиши **SHIFT**. 
 +
 +Для этого находим на рабочем пространстве нужный //объект// (пользуясь, если нужно, правой кнопкой мыши для промотки и колесом мыши для масштабирования), зажимаем **SHIFT** и кликаем на //объект//. Если зажать левую кнопку мыши, то можно выделить несколько //объектов//.
 +
 +Так как описанный способ в точности повторяет алгоритм выделения брашей и патчей, для выделить так же //trigger// или //func// не выйдет. Для этого надо вместе с **SHIFT** зажимать **CRTL** (//entity// и //модели// тоже можно выделять с **CTRL**).
 +
 +Итак, после выделения нужного //объекта// нажатие горячей клавиши **N** приведет к открытию //**entity inspector**//.
 +
 +{{:q3:entity_inspector.png|}}
 +
 +  * **entity inspector**
 +
 +Две верхних области инструмента представляют собой мощную справочную систему по всем доступным //объектам//. Выбирая в верхнем окошке нужный (по умолчанию выбран тот, который был выделен при запуске //**inspector**//'а, а если не было выделено ничего - то последний использованный) можно найти все (практически) ключи для его настройки.
 +Собственно говоря //entity// или //модель// в map-файле представляет собой список параметров, среди которых:
 +
 +  * Главный (свойственен всем //entity//)
 +    * //classname// - определяет, чем собственно выделенная //entity// является;
 +
 +  * Второстепенные (могут быть определены для всех //entity//)
 +    * //origin// - местоположение //entity// в формате "X Y Z";
 +    * //target// - метка, указывающая //entity//, следующую после данной в связи (//connection//);
 +    * //targetname// - метка данной //entity// для ссылания на нее другой;
 +
 +  * Специфические (могут быть определены для некоторых классов //entity//)
 +    * //spawnflags// - десятичное число, в котором кодируются булевые (да/нет) параметры //entity// (флаги);
 +    * //wait// - время в секундах, через которое //entity// может быть использована снова ("перезарядка");
 +    * //другие...//
 +
 +//Trigger//'ам, //func//'ам свойственно все вышесказанное, только в их состав также входят браши или патчи.
 +
 +Итак, вводя в поле //**Key**// любой параметр, описанный здесь или другой, найденный в справка Radiant'a или где-то еще, в поле //**Value**// его значение, и нажав **ENTER** (нажимать, находясь на поле //**Value**//) создастся параметр с заданным значение. Кнопками **delete key** и **clear all** можно соответственно удалить выделенную строчку с параметром или удалить все парамерты (кроме //classname//).
 +
 +Так и происходит управление //объектами// (кстати, менять можно даже //classname//, но после этого с //объекта// спадет выделение)
 +
 +Правда, в случае //target// и //targetname// существует "быстрый механизм", минующий //**entity inspector**// (если в друх словах, то надо выделить два //объекта// в том порядке, в котором они соединяются и нажать **CTRL+K**), но использовать такой метод лично автор статьи настоятельно не рекомендует. Кроме того, что таким способом не сделать многих возможных в //**entity inspector**// вещей (например, соединение одного //объекта// с несколькими), но и теряется понимание сути маппинга, его красота и логичность (немного помпезно, но зато правда).
 +
 +Так что //target// и //targetname// вам в руки, и вперед ;-)
 +
 +=== Свойства объектов ===
 +
 +  * При обычном копировании или импортировании //объектов// из других //map//-файлов параметры //target// и //targetname// снабжаются индексами. К примеру, при копировании //объекта// (//trigger//'а, к примеру) с параметром //target// равным //give_rocket//, создастся такой же //объект// с параметром //target// равным //give_rocket1//, а если значение равно //give_rocket1//, то получим значение //give_rocket2// и т.д.
 +
 +  * Важная особенность: при копировании //объекта// выделение __**не переходит**__ на новый //объект//.
 +
 +  * Не имеет значение, каково значение параметра //origin// у //entity//, за исключением:
 +    * //entity// пересекается с твердым брашем ;
 +    * //entity// находится в "открытом пространстве";
 +    * В обоих случаях уровень при  компиляции (//BSP -meta//) выдаст "утечку" (//leak//).
 +
 +=== Некоторые "фишки" в работе с entity inspector ===
 +  * При выделении некоторой строчки **Key:Value** в соответствующих полях появятся соответствующие значения; при этом если выделить другой //объект// и зайти в //**entity inspector**//, то поля будут содержать те же значения, которые там были во время закрытия. Таким образом можно удобно и быстро копировать строчки с параметрами из одного места в другое (к примеру, //_remap// от //модели// к //модели//).
 +
 +  * Если нужно для тестирования уровня передвинуть на некоторое время //info_player_start// (или аналог), но двигать обратно его потом будет лень, а наличие двух таких //entity// мешает стабильно спауниться, то можно установить в первом //info_player_start// параметр //classname// равным, к примеру, //info_player_start2//. Тогда он не будет никак отображаться на уровне и даст спокойно спауниться другому //info_player_start//'у.
 +
 +  * Кто чем может, помогайте :-)
 +
 +
 + --- //[[k47@email.com|Nt-kop4ik]] 26.08.2009//
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki