2016-05-19 8 views
1

Я полный новичок с 3DSMAX-скриптами.3DSMAX 2011 Scripting - Как клонировать и переименовывать кости

Мне нужно клонировать кости по их имени и переименовывать «клонированную кость» с конкретными именами.

Для Exemple:

я должен клонировать bip_01_Lhand и переименовать клон, как _bone_weapon_attachment и двигаться клонированный кости 10 units of distance на X axis

То же самое для bip01_head чей клон должен стать _bone_hat_attachment и двигаться клонированный кости 15 units of distance на Y axis

Как я могу это сделать? (obs: Я попытался сделать это сам, но не смог, когда не смог создать массив правильно)

+0

Если вы не получили удовлетворительного ответа здесь, попробуйте gamedev.stackexchange.com; там есть некоторые инструменты. (Хотел бы я сам помочь, но мы магазин майя.) – Crashworks

+0

Сделаем! Спасибо :) – Cami

ответ

0

Суть того, что вы хотите сделать, довольно распространена в техническом искусстве/анимации.

Если изменения, которые вам нужно применить, различны для каждой кости, тогда у вас не будет выбора, кроме как создать какое-то отображение. В python это можно легко сделать со словарем. Если вы используете maxscript, опция заключается в создании многомерного массива, в котором каждый элемент массива представляет собой массив, начинающийся с элемента, который вы ищете, второй элемент - это имя клона, а третий - смещение.

Затем просто проведите по каждой кости вашей установки, клонируйте намеченные кости и примените смещение, которое вы сохранили в сопоставлении.

Вот пример:

mapping = #(
    #("bip_01_Lhand ", "_bone_weapon_attachment", [10, 0, 0]), 
    #("bip01_head", "_bone_hat_attachmentand", [0, 15, 0]) 
)  

selectedNodes = getCurrentSelection() 

for s in selectedNodes do 
(
    -- for each item in the selection, go through each mapping and 
    -- see if a match can be found 
    for m in mapping do 
    (
     -- m is an array, so fetch each item of the array 
     name = m[1] 
     targetName = m[2] 
     offset = m[3] 
     -- verify that the names match, otherwise move on to the next 
     if s.name == name then 
     (
      cloneObj = copy s 
      cloneObj.name = targetName 
      cloneObj.position += offset 
     ) 
    ) 

) 

 Смежные вопросы

  • Нет связанных вопросов^_^