Эта статья поможет вам задать углы Эйлера для любой модели, таким образом получив целых три новых разновидности поворота. Что такое Yaw, Pitch и Roll? Чтобы это понять, посмотрите на картинки ниже.  Угол Yaw: 
Угол Pitch: 
Угол Roll: 
Для эмуляции этих углов требуется три шага. Шаг 1 - Подготовка модели. - Скачайте Model Editor здесь. - Откройте нужную модель в этой программе. - Выберите Windows -> Node Manager. - Нажмите правой кнопкой на хелпер (шарик с буквой "i" внутри), который назван Bone_Root или как-то похоже. - Выберите Edit Node. - Переименуйте его в Bone_Head. - Сохраните. - Импортируйте отредактированную модель в карту. Шаг 2 - Работа в Редакторе. - В нужном воине в Редакторе Объектов измените параметр "Графика - Файл модели" на импортированный. - Измените значение поля "Графика - Анимация: Время цветового перехода (сек.)" на 0. - Создайте боевую единицу. - Создайте две реальные переменные, их значение будет являться градусной мерой угла. Шаг 3 - Задаём углы Yaw и Pitch. В задании углов Yaw и Pitch нам помогут две простые Jass-функции. Code function AdjustToRangeOfNum takes real adj, real num returns real local real adjusting = adj loop exitwhen (adjusting <= num and adjusting >= 0) if adjusting < 1 then set adjusting = adjusting + num elseif adjusting > num then set adjusting = adjusting - num endif endloop return adjusting endfunction
function SetUnitYawPitch takes unit u, real yaw, real pitch returns nothing // Пользователь может ввести любой угол, а нам нужен такой, который попадёт в область [0;360]. //
И это делается из-за проверки недопустимых pitch-углов (90 и 270
градусов), у них изменение угла будет 0 и функция не поменяет поворот. local real y = AdjustToRangeOfNum(yaw,360.) local real p = AdjustToRangeOfNum(pitch,360.)
local real offsetX local real offsetY local real offsetZ if p == 90. or p == 270. then set p = p - 1. endif
if y == 90. or y == 270. then set y = y - 1 endif set offsetX = Cos(p * .0174532) * Cos(y * .0174532) * 1000000. set offsetY = Cos(p * .0174532) * Sin(y * .0174532) * 1000000. set offsetZ = Sin(p * .0174532) * 1000000. call SetUnitLookAt(u,"head",u,offsetX,offsetY,offsetZ) endfunction Вот, собственно, и всё.
|