Render.ru

Псевдо Body_IK для Bipeda, SOS!

Ololodya

Активный участник
#1
Всем привет, сразу скажу что я нихрена не скриптер. Пытаюсь уже который год реализовать удобство контроля для бипеда, получилось слепить кое-какой костыль, или даже два. И мне из этого надо сделать кресло-каталку.
Прилагаю два скрипта:
1. делает Align костей бипеда к соответствующим обычным костям
2. делает то же самое, только на Чекбатоне реалтаймово при изменении трансформа кости (конкретно одной кости!)
Так вот проблема в том что у меня массив костей и я не вкуриваю как во втором скрипте впихнуть в исполняющую функцию этот массив.
Одну кость получается, а вот массив....
По аналогии с первым скриптом не получается, потому что там появляется полтонны новых условий "if", "when" и другое-всякое.
И второй гвоздь - это отмена исполнения реалтаймового Aligna при отжатии чекбатона. Совершенно не представляю что писать в Else

Чтобы проверить работу как они работают надо создать любой геометрический или дамми объект с именем Point001
и Biped, у которого рутовая кость будет с именем Bip001
И затем двигаем Point001, а бипед будет к нему прилипать.

------Script_1
rollout baker "bakePose"
(

button bake_anim "Bake Animation!"

-- Initialize global variables
global sources = #()
global targets = #()


-- bakes animation from source object to target object.
on bake_anim pressed do
(
-- check if both source and target objects have been set
if (targets.count > 0 and sources.count == targets.count) then
(
sliderTime = currentTime --anim_start.value
animate on
(
for i in currentTime to currentTime --by step_size.value
do
(
for j = 1 to targets.count do
(
target = targets[j]
source = sources[j]
biped.setTransform target #pos source.transform.position false
biped.setTransform target #rotation source.transform.rotation true

)

)
)
)
-- message error for no source/target objects selected
else messagebox "Sources amount must be equal targets"
)
)

--Ass and Legs

append sources $Point001
append targets $Bip001

--append sources $CATRigSpine1
--append targets $Bip01_Spine

--append sources $CATRigSpine2
--append targets $Bip01_Spine1

--append sources $CATRigSpine3
--append targets $Bip01_Spine2


createDialog baker 180 130

---------------------------------------------------------------------------------------------


-----Script_2 (autoalign)
rollout autoAligner "SIMPLE_AUTO-ALIGN"
(
checkbutton bake_anim "Bake Animation!"

fn CallbackFn2 ev nd =
(
redrawviews()
)

on bake_anim changed theState do
( if theState == true then
(

callbackItem = NodeEventCallback mouseUp:true delay:100 all:CallbackFn2

CH_autoalign_pos=when transform $Point001 changes handleAt:#redrawViews do
biped.setTransform $Bip001 #pos $Point001.transform.position false
CH_autoalign_rot=when transform $Point001 changes handleAt:#redrawViews do
biped.setTransform $Bip001 #rotation $Point001.transform.rotation true

)

--else (callbackItem =false; CH_autoalign_pos=false; CH_autoalign_rot=false)
)
)

createDialog autoAligner 180 130
 
Сверху