Доброго дня знатоки. У меня следующая задача - есть обьект в форме ЗВЕЗДА. По краям у него расположены модели лампочек. Хочу сделать что бы в определенный момент они начали включаться в стиле "Лас Вегас", тоесть линейно)). В ручную такое заанимировать нереально, так как лампочек очень много. Как я понимаю тут нужен какой то скрипт, который срабатывал бы (к примеру менял в BLEND материале с обычного на светящийся) при контакте каким то ГИЗМО, который в свою очередь двигался по краю формы этой самой звезды. Ну или вроде того. Может подскажете где почитать?
Материал мультисаб с двумя слотами - в первом обычный матриал во втором с illum 100
for t in 0 to 100 руками нужно установить начало и конец анимации. Триггер вручную анимируешь чтобы пересекал обьекты ,потом выделяешь все обьекты которые пересекает тригер и запускаешь скрипт.
J-BondtriggerBox - это имя того что будет тригером
на всех сферах Material modifier с id =1
Материал мультисаб с двумя слотами - в первом обычный матриал во втором с illum 100
for t in 0 to 100 руками нужно установить начало и конец анимации. Триггер вручную анимируешь чтобы пересекал обьекты ,потом выделяешь все обьекты которые пересекает тригер и запускаешь скрипт.
Спасибо огромное за ответ. Сегодня обязательно опробую.
Проверил - все работает! Огромное спасибо!
ПС.
Подскажите, а есть возможность сделать что бы лампа тухла несколько кадров после соприкосновения с триггер обьектом?
Подскажите, а есть возможность сделать что бы лампа тухла несколько кадров после соприкосновения с триггер обьектом?
Попробуй так:
1. Создай 3 сферы и один Box с названием "triggerBox".
2. Создай еще одну сферу с названием "main_light".
3. Создай материал Blend и примени его к объекту "main_light".
4. Сделай анимацию для дорожки Mix Amount для материала объекта "main_light". Анимация должна начинаться с кадра 0 (ноль). Сделай например, сначала лампочка выключена (Mix Amount=0), потом в следующем кадре лампочка включается (Mix Amount=100), потом в следующих кадрах лампочка медленно тухнет.
5. Сделай анимацию перемещения для объекта "triggerBox".
6. Выдели 3 сферы и запусти скрипт.
selected_objects_properties=#(); --#(animation_state,animation_current_frame,animation_total_frames)
selected_objects=selection as array
for i=1 to selected_objects.count do
( if(classof $main_light.material==Blend)then
(
new_blend_material=Blend(); new_blend_material.mixAmount=0;
new_blend_material.map1=$main_light.material.map1
new_blend_material.map2=$main_light.material.map2
selected_objects[i].material=new_blend_material;
main_light_frames_count=0;
if(classof $main_light.material.mixAmount.controller==bezier_float)then
(
main_light_keys_count=$main_light.material.mixAmount.controller.keys.count
if(main_light_keys_count>0)then
main_light_frames_count=int($main_light.material.mixAmount.controller.keys[main_light_keys_count].time.frame)
selected_objects_properties[i]=#(0,0,main_light_frames_count);
)))
if(selected_objects_properties.count!=0)then
(animate on
for t=0 to 100 do ( at time t
(
for i=1 to selected_objects.count do
(
qwer = Intersects $triggerBox selected_objects[i]
if (qwer==true and selected_objects_properties[i][1]==0)then selected_objects_properties[i][1]=1;--start playing
selected_objects[i].material.mixAmount=selected_objects[i].material.mixAmount+0--create keys in every frame
if(selected_objects_properties[i][1]==1)then --playing
(
main_light_mix_amount=0;
at time selected_objects_properties[i][2] (main_light_mix_amount=$main_light.material.mixAmount;)
selected_objects[i].material.mixAmount=main_light_mix_amount
selected_objects_properties[i][2]=selected_objects_properties[i][2]+1--next frame
if(selected_objects_properties[i][2]>selected_objects_properties[i][3])then selected_objects_properties[i][1]=2;--stop playing
)))))
igorznag - спасибо. Жаль, но не работает почему то(( Main_Light сама по себе один раз проиграла анимацию (по своим же ключам), а остальные сферы, после запуска скрипта, обретают материал Main_Light в стартовом состоянии - тоесть свет ВЫКЛ. И дальше никакой анимации. Триггер естевственно заанимировал))
((
Подскажите мне болвану как правильно написать если я хочу 2 "if". Я просто подумал сделать 2-3 этих триггер боксов и на каждый разный уровень illumination. Но скриптовой грамматики не знаю, получается только одно условие((
Пытался сделать так
animate on
for t in 0 to 100 by 1 do
at time t
(
for obj in selection do
(
qwer1 = Intersects $triggerBox1 obj
qwer2 = Intersects $triggerBox2 obj
if (qwer1) then obj.modifiers[#Material].materialID =2
if (qwer2) then obj.modifiers[#Material].materialID =3
else obj.modifiers[#Material].materialID =1
)
)
Добавил перед qwer - obj.modifiers[#Material].materialID =1, вроде получилось
animate on
for t in 0 to 100 by 1 do
at time t
(
for obj in selection do
(
obj.modifiers[#Material].materialID =1
qwer1 = Intersects $triggerBox1 obj
qwer2 = Intersects $triggerBox2 obj
if (qwer1) then obj.modifiers[#Material].materialID =2
if (qwer2) then obj.modifiers[#Material].materialID =3
)
)
поставь третий тригер
иначе получается, что если у тебя со вторым тригером не будет контакта,будет выполнятсся else .Т.е. затирать действие первого тригера.
animate on
for t in 0 to 100 by 1 do
at time t
(
for obj in selection do
(
qwer1 = Intersects $triggerBox1 obj
qwer2 = Intersects $triggerBox2 obj
qwer3 = Intersects $triggerBox3 obj
if (qwer1) then obj.modifiers[#Material].materialID =2
if (qwer2) then obj.modifiers[#Material].materialID =3
if (qwer3) then obj.modifiers[#Material].materialID =1
--Manual
sphere1=Sphere pos:[50,0,0] radius:10
sphere2=Sphere pos:[100,0,0] radius:10
sphere3=Sphere pos:[150,0,0] radius:10
main_light=Sphere pos:[50,100,0] radius:10
main_light.name="main_light"
trigger_box=Box pos:[0,0,0] width:10 height:10 length:10
trigger_box.name="triggerBox"
animate on
(
at time 100 (trigger_box.pos=[200,0,0])
)
map1=standardMaterial(); map1.diffuse=color 0 144 0;map1.selfIllumAmount =0;map1.specularLevel=0;
map2=standardMaterial(); map2.diffuse=color 0 144 0;map2.selfIllumAmount =100;map2.specularLevel=100;
new_blend_material=Blend();
new_blend_material.map1=map1
new_blend_material.map2=map2
new_blend_material.mixAmount=0;
animate on
(
at time 1 (new_blend_material.mixAmount=100;)
at time 10 (new_blend_material.mixAmount=0;)
)
main_light.material=new_blend_material;
select #(sphere1,sphere2,sphere3)
--End Manual
--Auto
selected_objects_properties=#(); --#(animation_state,animation_current_frame,animation_total_frames)
selected_objects=selection as array
for i=1 to selected_objects.count do
( if(classof $main_light.material==Blend)then
(
new_blend_material=Blend(); new_blend_material.mixAmount=0;
new_blend_material.map1=$main_light.material.map1
new_blend_material.map2=$main_light.material.map2
selected_objects[i].material=new_blend_material;
main_light_frames_count=0;
if(classof $main_light.material.mixAmount.controller==bezier_float)then
(
main_light_keys_count=$main_light.material.mixAmount.controller.keys.count
if(main_light_keys_count>0)then
main_light_frames_count=int($main_light.material.mixAmount.controller.keys[main_light_keys_count].time.frame)
selected_objects_properties[i]=#(0,0,main_light_frames_count);
)))
if(selected_objects_properties.count!=0)then
(animate on
for t=0 to 100 do ( at time t
(
for i=1 to selected_objects.count do
(
qwer = Intersects $triggerBox selected_objects[i]
if (qwer==true and selected_objects_properties[i][1]==0)then selected_objects_properties[i][1]=1;--start playing
selected_objects[i].material.mixAmount=selected_objects[i].material.mixAmount+0--create keys in every frame
if(selected_objects_properties[i][1]==1)then --playing
(
main_light_mix_amount=0;
at time selected_objects_properties[i][2] (main_light_mix_amount=$main_light.material.mixAmount;)
selected_objects[i].material.mixAmount=main_light_mix_amount
selected_objects_properties[i][2]=selected_objects_properties[i][2]+1--next frame
if(selected_objects_properties[i][2]>selected_objects_properties[i][3])then selected_objects_properties[i][1]=2;--stop playing
)))))
--End Auto
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
-=KoRn_Sir=-
JBond
Лучше через модификатор Material ID
JBond
animate on
for t in 0 to 100 by 2 do
at time t
(
for obj in selection do
(
qwer = Intersects $triggerBox obj
if (qwer) then obj.modifiers[#Material].materialID =2
else obj.modifiers[#Material].materialID =1
)
)
JBond
на всех сферах Material modifier с id =1
Материал мультисаб с двумя слотами - в первом обычный матриал во втором с illum 100
for t in 0 to 100 руками нужно установить начало и конец анимации. Триггер вручную анимируешь чтобы пересекал обьекты ,потом выделяешь все обьекты которые пересекает тригер и запускаешь скрипт.
-=KoRn_Sir=-
-=KoRn_Sir=-
ПС.
Подскажите, а есть возможность сделать что бы лампа тухла несколько кадров после соприкосновения с триггер обьектом?
JBond
igorznag
1. Создай 3 сферы и один Box с названием "triggerBox".
2. Создай еще одну сферу с названием "main_light".
3. Создай материал Blend и примени его к объекту "main_light".
4. Сделай анимацию для дорожки Mix Amount для материала объекта "main_light". Анимация должна начинаться с кадра 0 (ноль). Сделай например, сначала лампочка выключена (Mix Amount=0), потом в следующем кадре лампочка включается (Mix Amount=100), потом в следующих кадрах лампочка медленно тухнет.
5. Сделай анимацию перемещения для объекта "triggerBox".
6. Выдели 3 сферы и запусти скрипт.
-=KoRn_Sir=-
((
Подскажите мне болвану как правильно написать если я хочу 2 "if". Я просто подумал сделать 2-3 этих триггер боксов и на каждый разный уровень illumination. Но скриптовой грамматики не знаю, получается только одно условие((
Пытался сделать так
animate on for t in 0 to 100 by 1 do at time t ( for obj in selection do ( qwer1 = Intersects $triggerBox1 obj qwer2 = Intersects $triggerBox2 obj if (qwer1) then obj.modifiers[#Material].materialID =2 if (qwer2) then obj.modifiers[#Material].materialID =3 else obj.modifiers[#Material].materialID =1 ) )JBond
-=KoRn_Sir=-
-=KoRn_Sir=-
JBond
иначе получается, что если у тебя со вторым тригером не будет контакта,будет выполнятсся else .Т.е. затирать действие первого тригера.
animate on
for t in 0 to 100 by 1 do
at time t
(
for obj in selection do
(
qwer1 = Intersects $triggerBox1 obj
qwer2 = Intersects $triggerBox2 obj
qwer3 = Intersects $triggerBox3 obj
if (qwer1) then obj.modifiers[#Material].materialID =2
if (qwer2) then obj.modifiers[#Material].materialID =3
if (qwer3) then obj.modifiers[#Material].materialID =1
)
JBond
-=KoRn_Sir=-
JBond
igorznag