Logic measure movement

Материал из CSM Wiki
Перейти к навигации Перейти к поиску

Оригинал Logic_measure_movement

Описание

Объект logic_measure_movement отслеживает движения одного объекта относительно другого и применяет эти движения на третьем объекте.

Подробное описание действия этого объекта смотрите в пункте "Как это работает".

Особенности использования

  • Этот объект обновляется в каждом раунде. Это означает что любые изменения объекта НЕ будут наследоваться в последующих раундах.
  • Объект может быть установлен в любом месте на карте.
  • На карте может быть установлено множество этих объектов

Ошибки

Нельзя использовать в качестве объекта "Entity to Move" игроков, физические объекты, и прочие объекты имеющие модель столкновений, потому что все они имеют собственную модель взаимодействия с окружающим миром. Если указать игрока, то игрок будет стремиться упасть на землю под действием гравитации, а объект logic_measure_movement будет стараться удерживать его в рассчитанной точке. Это почти что во всех случаях приводит к ужасающе неправдоподобной анимации и гибели игрока. Если указать физический объект, то он не сможет быть использован объектом logic_measure_movement в тех случаях, когда совершает собственные физические движения, например: когда по нему выстрелят. В этих случаях физический объект будет перемещён в точку свой реально позиции, то есть в ту точку где бы он находился если бы не действия со стороны объекта logic_measure_movement, и будет находиться в этой точке до тех пор, пока не закончит выполнять собственные движения. Так же у физического объекта будет создано целых две модели столкновения, одна - в его реальной точке (не реагирующая на выстрелы, но реагирующая на прикосновения), и вторая - в точке, рассчитанной объектом logic_measure_movement (реагирующая на выстрелы, но не реагирующая на прикосновения). Остальные объекты, имеющие собственную модель столкновений, не должны быть использованы по тем же причинам что и физические объекты.

Заметки

Этот объект очень удобен, так как позволяет перемещать те объекты, которые не могут быть прикреплены к другим объектам через свойство "Parent". Такими являются абсолютно все объекты, которые не обновляются в каждом раунде. Если попробовать прикрепить такие объекты к обновляющимся объектам через свойство "Parent", то они будут автоматически удалены с карты (на все последующие раунды) в первом же раунде при первом обновлении объектов. Потребность в передвижении необновляющихся объектов возникает очень часто, поэтому умение применять объект logic_measure_movement всегда пригодится при создании ваших карт.

При выборе объекта "Entity to Measure" как правило встаёт вопрос: "какой объект подходит лучше всего для этого свойства?" Обычно приходится точно указывать точку, в которую будет помещён объект "Entity to Move", поэтому объект должен быть точечным. Первым объектом, который сразу приходит на ум, скорей всего будет объект info_target, потому что он точечный и как раз используется для указания простой точки на карте. Однако объект info_target не подходит, потому что он не обновляется в каждом раунде игры, а значит не может быть прикреплён к какому-либо объекту через свойство "Parent". Нужен другой точечный объект, который максимально прост, отнимает как можно меньше ресурсов игры и в то же время обновляется из раунда в раунд. Таких объектов несколько но наиболее используемым является объект env_spark с настройками по умолчанию. Объект env_spark является самым не требовательным к ресурсам точечным объектом, к тому же он обновляется в каждом раунде, может прикрепляться к любым объектам через свойство "Parent" и имеет хорошую заметную иконку в виде искр.

Как это работает

  • Со смещением:

Предположим, что у нас есть четыре объекта 1,2,3,4. 1 – это "Entity to Measure", 2 – это "Measure Reference", 3 – это "Entity to Move", 4 – "Movement Reference". Наша задача заставить объект 3 двигаться так же как объект 1. Теперь представим что из объекта 2 в объект 1 проведена линия, соединяющая эти объекты. Мысленно поместим эту линию в объект 4 так, чтобы объект 2 находился на месте объекта 4. В результате перемещения линии, та точка, в которой окажется объект 1, и будет являться расчётной точкой, куда будет помещен объект 3 в процессе игры. Углы поворота объекта 1 будут автоматически применяться к объекту 1, поэтому углы поворота не зависят от выбора объектов 2 и 4.

  • Без смещения, сохранение позиции:

Ознакомьтесь с п. "Со смещением". Теперь представим, что объекты 2 и 4 являются одним и тем же объектом, значит нам не придётся передвигать линию из объекта 2 в объект 4, а это означает, что объект 3 всегда будет находиться точно в том же месте где и объект 1, тем самым давая возможность точно указывать где будет находиться объект 3 во время игры.

Применительно для объекта logic_measure_movement, если в свойствах "Measure Reference" и "Movement Reference" указать имя одного и того же объекта, то это может значительно упростить процесс создания карты.

Параметры

  • Measurement Type – какой тип движений отслеживать у объекта "Entity to Measure":
    • Position – позиция (origin) и углы поворота (angles); удобно использовать если объект "Entity to Measure" является физическим объектом, или прикреплён к физическому объекту, потому что у физических объектов позиция и углы поворота меняются постоянно;
    • Eye Position – точка зрения объекта (EyePosition) и углы зрения объекта (EyeAngles); удобно использовать только в том случае, если объект "Entity to Measure" является игроком;
  • Entity to Measure – имя любого объекта, чьи движения будут отслеживаться;
  • Measure Reference – имя любого объекта, относительно которого будут измеряться движения объекта "Entity to Measure"; если значение этого свойства равно значению свойства "Movement Reference", то объект "Entity to Move" всегда будет находиться в точке объекта "Entity to Measure";
  • Entity to Move - имя любого объекта, который будет полностью повторять движения объекта "Entity to Measure";
  • Movement Reference – имя любого объекта, относительно которого будет двигаться объект "Entity to Move" при повторении движений объекта "Entity to Measure"; если значение этого свойства равно значению свойства "Measure Reference", то объект "Entity to Move" всегда будет находиться в точке объекта "Entity to Measure";
  • Movement Scale – масштаб смещения объекта "Entity to Move" относительно объекта "Movement Reference"; 1 – нормальный масштаб; 2 – объект "Entity to Move" находится на половине пути между нормальным смещением и объектом "Movement Reference"; 4 – объект "Entity to Move" находится на 1/4 пути между нормальным смещением и объектом "Movement Reference"; 0.5 – объект "Entity to Move" находится в два раза дальше от объекта "Movement Reference" чем при нормальном смещении.

Inputs

  • Enable – включить объект;
  • Disable – выключить объект;
  • SetMeasureTarget <string> - установить новое значение свойства "Entity to Measure";
  • SetMeasureReference <string> - установить новое значение свойства "Measure Reference";
  • SetTarget <string> - установить новое значение свойства "Measure Reference";
  • SetTargetReference <string> - установить новое значение свойства "Movement Reference";
  • SetTargetScale <float> - установить новое значение свойства "Movement Scale".

Карта

csssdk_logic_measure_movement.vmf

Используются объекты

  • logic_measure_movement
  • func_physbox
  • phys_keepupright
  • env_spark
  • move_rope
  • keyframe_rope

Описание карты

На карте размещено два шара, соединённых растягивающейся верёвкой, а так же два других шара, размещённых один над другим. Все шары являются объектами func_physbox, поэтому их можно передвигать по карте толкая их или стреляя по ним. Шары с верёвкой отлично демонстрируют использование объекта logic_measure_movement. При движении шаров концы верёвки всегда находится в точках прикрепления к шарам, что даёт хороший визуальный результат. Два остальных шара демонстрируют баг в работе объекта logic_measure_movement, подробно описанный в пункте "Ошибки". Баг заключается в том, что в качестве объекта "Entity to Move" был выбран физический объект func_physbox. Побегайте рядом с этими шарами и понаблюдайте как проявляется баг. Скорей всего, результат будет для вас неожиданным и интересным.

Смотрите также