Можно ли привязать готовую анимацию шасси (всего шасси) до элемента slider?
Попробуйте такой вариант. Пример:
В новой сцене создаем 2 чайника и один слайдер.
Анимируем положение и вращение чайников с помощью ключей.
Перемещаем Time Slider в первом кадре анимации.
Открываем окно Curve Editor.
Auto Select включаем Animated.
Auto Expand включаем Animated.
Auto Scroll включаем Selected
Выделяем чайники.
Нажимаем правую кнопку мыши на выделенные дорожки и выбираем пункт Collect Parameters.
В окне Parameter Collector устанавливаем название "Master" для свитка.
Создаем еще один пустой свиток с названием "Slave" и выделяем его.
Название свитков не имеет значение. Имеет значение порядок свитков и порядок параметров.
Создаем копии (Clone>Copy) чайников. Выделяем копии чайников.
Устанавливаем контроллер Float Script для выделенных дорожках копиях чайников.
Нажимаем правую кнопку мыши на выделенные дорожки и выбираем пункт Collect Parameters.
Выделяем оригинальные (не копии) чайники и прячем их (Hide).
Выделяем слайдер.
Устанавливаем контроллер Bezier Float для дорожки Slider01>Object (Slider)>value
На панели Modify устанавливаем значение для Value, Minimum, Maximum.
Value - это текущий кадр анимации
Minimum - это первый кадр анимации
Maximum - это последний кадр анимации
Выделяем слайдер. Запускаем скрипт. В новом окне нажимаем кнопку Apply.
Перемещаем Time Slider в нужном кадре.
Включаем кнопку Select and Manipulate и изменяем/анимируем значение Value слайдера.
Код:
try destroydialog igorznag_reaction_manager catch()
rollout igorznag_reaction_manager "Reaction Manager"
( button btn_apply "Apply"
on btn_apply pressed do
( if(selection.count==1)then
( obj=selection[1]
if(classof obj==sliderManipulator)then
( ci=ParamCollectorOps.getActiveCollection()
if(ParamCollectorOps.numRollouts ci==2)then
(
r1np=ParamCollectorOps.getNumParameters ci 1
r2np=ParamCollectorOps.getNumParameters ci 2
if(r1np==r2np and obj.value.controller!=undefined)then
( for i=1 to r1np do
(
param1_index=ParamCollectorOps.getParameterIndex ci 1 i
param2_index=ParamCollectorOps.getParameterIndex ci 2 i
param1_controller=ParamCollectorOps.getParameterAnim param1_index
param2_controller=ParamCollectorOps.getParameterAnim param2_index
if(param1_controller!=undefined and classof param2_controller==float_script)then
(
param2_controller.AddObject "slider" obj.value.controller
param2_controller.AddObject "contr1" param1_controller
str="try(with animate off at time (int slider.value) contr1.value)catch 0"
param2_controller.script=str
)--if(param1_controller!=undefined and classof param2_controller==float_script)
)--for i=1 to r1np do
)--if(r1np==r2np and obj.value.controller!=undefined)then
)--if(ParamCollectorOps.numRollouts ci==2)then
)--if(classof obj=sliderManipulator)then
)--if(selection.count==1)then
)--on btn_aplly pressed do
); createDialog igorznag_reaction_manager
Чтобы запустить скрипт нужно:
1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
2. Сохраняем текстовый файл с названием "test.ms"
3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"