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