Темы:
Данная статья является продолжением перевода материала TutorialVehicle, размещенного на сайте LSL Wiki. Начало читайте здесь и здесь.
Управление транспортными средствами
Транспортным средством можно манипулировать с помощью внешнего воздействия и/или посредством таких функций как llApplyImpulse. Однако для обеспечения более простого и плавного управления лучше использовать двигатели. Направление движения объекта задается вызовом процедуры llSetVehicleVectorParam. Например, для того, чтобы заставить транспорт двигаться со скоростью 5 м/с вдоль своей локальной оси x нужно поместить в скрипт такую строку:
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION,<5, 0, 0>);
Усилие двигателя – не единственный его параметр, вы также можете контролировать скорость нарастания тяги двигателя (VEHICLE_LINEAR_MOTOR_TIMESCALE), а, кроме того, существует параметр, определяющий спад эффективности двигателя со временем (VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE).
Поворот транспортного средства осуществляется заданием параметра VEHICLE_ANGULAR_MOTOR_DIRECTION и других соответствующих параметров. Установкой некоторых флагов можно заставить угловой двигатель подчиняться движениям камеры в режиме вида от первого лица (mouselook).
Линейный двигатель
Следующие параметры используются для управления линейным двигателем:
VEHICLE_LINEAR_MOTOR_DIRECTION
Векторный параметр. Это скорость (в м/с), которую попытается развить транспортное средство. Задается относительно локального каркаса объекта. Максимальное значение равно 40.
VEHICLE_LINEAR_MOTOR_OFFSET
Векторный параметр. Задает точку, смещенную относительно центра массы транспортного средства, в которой прикладывается усилие линейного двигателя. Это позволяет линейному двигателю сообщать объекту момент вращения. Отсчитывается относительно локального каркаса объекта, максимальное значение равно 100 метров. Не стоит беспокоиться о стабильности – если транспортное средство начнет вращаться слишком быстро (со скоростью более 720 градусов в секунду), то вмешается демпфер угловой скорости и погасит скорость вращения. Причина, по которой данный параметр может быть столь большим, состоит в том, что он "соперничает" с другими характеристиками транспортного средства, такими как угловое смещение и вертикальная сила притяжения. Некоторые другие характеристики транспорта могут значительно снизить эффективность вращательного момента от смещенного линейного двигателя. В этом случае и пригодится длинный рычаг.
VEHICLE_LINEAR_MOTOR_TIMESCALE
Параметр в формате с плавающей точкой. Постоянная времени, определяет, как быстро двигатель сможет разогнать транспорт до заданной скорости. Минимальное значение составляет приблизительно 0,06 секунд.
VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE
Параметр в формате с плавающей точкой. Эффективность двигателя будет экспоненциально спадать в течение заданного параметром времени, но эффективность восстановится, если явным образом задать значение усилия двигателя. Максимальное значение равно 120 секунд. Данный параметр действует всегда.
Флаги, влияющие на линейный двигатель:
VEHICLE_FLAG_LIMIT_DEFLECTION_UP
Полезен для наземного транспорта. Установка этого флага фиксирует z-компоненту линейного двигателя (в мировых координатах) для предотвращения исчезновения гравитации.
Одного лишь параметра скорости двигателя недостаточно для создания всех необходимых транспортных средств. Например, некоторые захотят сделать автомобиль, который мгновенно набирает желаемую скорость, другим может понадобиться катер, который плавно разгоняется до заданной скорости. Для управления этим эффектом можно использовать параметр VEHICLE_LINEAR_MOTOR_TIMESCALE. В сущности, постоянная времени (timescale) двигателя определяет время экспоненциального нарастания скорости транспорта до ее полного значения.
Что произойдет если вы установите линейную скорость транспортного средства и так оставите этот параметр? Объект станет двигаться и никогда не остановится? Не обязательно: автоматическое ослабление действия двигателя будет постепенно снижать его эффективность после установки воздействия.
Каждый раз, когда вы задаете вектор действия двигателя, его сцепление немедленно начинает уменьшаться по экспоненциальному закону с постоянной времени, определяемой параметром VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE, так, что через некоторое время двигатель уже не будет оказывать никакого воздействия на объект. Данный параметр служит двум целям. Во-первых, поскольку его значение не может быть больше 120 секунд, и он всегда активен, это гарантирует, что транспорт не будет двигаться бесконечно долго в отсутствии активного управления (с клавиатуры или посредством команд в скрипте). Во-вторых, этот параметр может быть использован для манипулирования транспортным средством с помощью простой модели управления. То есть, вместо того, чтобы включать и выключать двигатель в зависимости от нажатия или отпускания какой-либо клавиши, постоянную времени затухания можно установить в малое значение, и задать включение двигателя по нажатию клавиши, а при ее отпускании он будет автоматически замедляться.
Поскольку эффективность двигателя переустанавливается в начальное положение, когда производится задание вектора воздействия двигателя, то установка нулевого значения вектора отличается от случая, когда эффективность двигателя полностью погасится. В первом случае объект попытается достигнуть нулевой скорости, во втором – двигатель просто будет бездействовать.
Если вы установите значение параметра VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE меньшим, чем значение параметра VEHICLE_LINEAR_MOTOR_TIMESCALE, то эффективная амплитуда вектора воздействия двигателя будет уменьшена.
Продолжение следует.
Источник TutorialVehicle














