обьясните, пожалуйста, как пользоваться этой адской штукой. Я голову себе сломал уже, пытаясь разобраться, как сделать так: на сфере атрибут snap_to управляет привязкой к кубику. При переключении этого атрибута с World на Cube, срабатывает скриптДжоб: int $sw = `scriptJob -kws -cu 1 -ас "SwitchOffset"`. SwitchOffset - это процедура, которая делает офсет сфере. На сферу ставлю ключи - в определенный момент времени ей надо прикрепится к проносящемуся мимо кубику и улететь вместе с ним. Пытался разобраться с кондишином и эвентом, не срабатывает. Можно ли в одной строке задавать и кондишины и эвенты? Можно ли задавать много условий? Необходимо сделать срабатывание переключения при проигрывании анимации, при ручном перемещении таймслайдера по врменной линейке и, конечно же, при ручном изменении атрибута сферы (с ворлд на кубик и назад). И не ссылайте меня в справку, я ее начитался уже.
вопрос по scriptJob - я не понимаю как им пользоваться
- Автор темы moris
- Дата создания
сори. Не оттуда скопировал. В исходнике у меня выглядит все вот так, как вы написали, DEL. Таким образом у меня получается все сделать и этот скриптджоб срабатывает должным образом. У меня не получается сделать так, чтобы при проигровании анимации срабатывал мой скприпт. Меня интересует как записывать много команд для скриптДжоб, чтобы выполнялось много условий: при переключении атрибута, при проигровании анимации и при перемещении таймслайдера вручную. Например:
// это я вручную переключил атрибут
scriptJob -kws -cu 1 -runOnce false -аttributeChange pSphere1.snap_to SwitchOffset;
//теперь хочу задать событие, при котором будет срабатывать мой офсет:
scriptJob -kws -cu 1 -runOnce false -е "playingBack" SwitchOffset;
...но не получается
// это я вручную переключил атрибут
scriptJob -kws -cu 1 -runOnce false -аttributeChange pSphere1.snap_to SwitchOffset;
//теперь хочу задать событие, при котором будет срабатывать мой офсет:
scriptJob -kws -cu 1 -runOnce false -е "playingBack" SwitchOffset;
...но не получается
int $sw = `scriptJob -kws -cu 1 -ac Cube.snap_to SwitchOffset`;
//int $pw = `scriptJob -kws -cu 1 -ac Cube.snap_to SwitchOffset`;
global proc SwitchOffset()
{
int $chBox = `getAttr "Cube.snap_to"`;
if ($chBox==0)
{
if (objExists("Cube_pointConstraint"))
{
delete Cube_pointConstraint;
}
if( objExists("Cube_orientConstraint"))
{
delete Cube_orientConstraint;
}
setAttr CubeGroup_pointConstraint1.WorldW0 1;
setAttr CubeGroup_pointConstraint1.CW1 0;
setAttr CubeGroup_pointConstraint1.SW2 0;
setAttr CubeGroup_orientConstraint1.WorldW0 1;
setAttr CubeGroup_orientConstraint1.CW1 0;
setAttr CubeGroup_orientConstraint1.SW2 0;
pointConstraint -n N_obj_pointConstraint N_obj CubeGroupSub;
orientConstraint -n N_obj_orientConstraint N_obj CubeGroupSub;
delete N_obj_pointConstraint;
delete N_obj_orientConstraint;
pointConstraint -n Cube_pointConstraint CubeGroupSub N_obj;
orientConstraint -n Cube_orientConstraint CubeGroupSub N_obj;
return;
}
if ($chBox==1)
{
if (objExists("Cube_pointConstraint"))
{
delete Cube_pointConstraint;
}
if( objExists("Cube_orientConstraint"))
{
delete Cube_orientConstraint;
}
setAttr CubeGroup_pointConstraint1.WorldW0 0;
setAttr CubeGroup_pointConstraint1.CW1 1;
setAttr CubeGroup_pointConstraint1.SW2 0;
setAttr CubeGroup_orientConstraint1.WorldW0 0;
setAttr CubeGroup_orientConstraint1.CW1 1;
setAttr CubeGroup_orientConstraint1.SW2 0;
pointConstraint -n N_obj_pointConstraint N_obj CubeGroupSub;
orientConstraint -n N_obj_orientConstraint N_obj CubeGroupSub;
delete N_obj_pointConstraint;
delete N_obj_orientConstraint;
pointConstraint -n Cube_pointConstraint CubeGroupSub N_obj;
orientConstraint -n Cube_orientConstraint CubeGroupSub N_obj;
return;
}
if ($chBox==2)
{
if (objExists("Cube_pointConstraint"))
{
delete Cube_pointConstraint;
}
if( objExists("Cube_orientConstraint"))
{
delete Cube_orientConstraint;
}
setAttr CubeGroup_pointConstraint1.WorldW0 0;
setAttr CubeGroup_pointConstraint1.CW1 0;
setAttr CubeGroup_pointConstraint1.SW2 1;
setAttr CubeGroup_orientConstraint1.WorldW0 0;
setAttr CubeGroup_orientConstraint1.CW1 0;
setAttr CubeGroup_orientConstraint1.SW2 1;
pointConstraint -n N_obj_pointConstraint N_obj CubeGroupSub;
orientConstraint -n N_obj_orientConstraint N_obj CubeGroupSub;
delete N_obj_pointConstraint;
delete N_obj_orientConstraint;
pointConstraint -n Cube_pointConstraint CubeGroupSub N_obj;
orientConstraint -n Cube_orientConstraint CubeGroupSub N_obj;
return;
}
}
//int $pw = `scriptJob -kws -cu 1 -ac Cube.snap_to SwitchOffset`;
global proc SwitchOffset()
{
int $chBox = `getAttr "Cube.snap_to"`;
if ($chBox==0)
{
if (objExists("Cube_pointConstraint"))
{
delete Cube_pointConstraint;
}
if( objExists("Cube_orientConstraint"))
{
delete Cube_orientConstraint;
}
setAttr CubeGroup_pointConstraint1.WorldW0 1;
setAttr CubeGroup_pointConstraint1.CW1 0;
setAttr CubeGroup_pointConstraint1.SW2 0;
setAttr CubeGroup_orientConstraint1.WorldW0 1;
setAttr CubeGroup_orientConstraint1.CW1 0;
setAttr CubeGroup_orientConstraint1.SW2 0;
pointConstraint -n N_obj_pointConstraint N_obj CubeGroupSub;
orientConstraint -n N_obj_orientConstraint N_obj CubeGroupSub;
delete N_obj_pointConstraint;
delete N_obj_orientConstraint;
pointConstraint -n Cube_pointConstraint CubeGroupSub N_obj;
orientConstraint -n Cube_orientConstraint CubeGroupSub N_obj;
return;
}
if ($chBox==1)
{
if (objExists("Cube_pointConstraint"))
{
delete Cube_pointConstraint;
}
if( objExists("Cube_orientConstraint"))
{
delete Cube_orientConstraint;
}
setAttr CubeGroup_pointConstraint1.WorldW0 0;
setAttr CubeGroup_pointConstraint1.CW1 1;
setAttr CubeGroup_pointConstraint1.SW2 0;
setAttr CubeGroup_orientConstraint1.WorldW0 0;
setAttr CubeGroup_orientConstraint1.CW1 1;
setAttr CubeGroup_orientConstraint1.SW2 0;
pointConstraint -n N_obj_pointConstraint N_obj CubeGroupSub;
orientConstraint -n N_obj_orientConstraint N_obj CubeGroupSub;
delete N_obj_pointConstraint;
delete N_obj_orientConstraint;
pointConstraint -n Cube_pointConstraint CubeGroupSub N_obj;
orientConstraint -n Cube_orientConstraint CubeGroupSub N_obj;
return;
}
if ($chBox==2)
{
if (objExists("Cube_pointConstraint"))
{
delete Cube_pointConstraint;
}
if( objExists("Cube_orientConstraint"))
{
delete Cube_orientConstraint;
}
setAttr CubeGroup_pointConstraint1.WorldW0 0;
setAttr CubeGroup_pointConstraint1.CW1 0;
setAttr CubeGroup_pointConstraint1.SW2 1;
setAttr CubeGroup_orientConstraint1.WorldW0 0;
setAttr CubeGroup_orientConstraint1.CW1 0;
setAttr CubeGroup_orientConstraint1.SW2 1;
pointConstraint -n N_obj_pointConstraint N_obj CubeGroupSub;
orientConstraint -n N_obj_orientConstraint N_obj CubeGroupSub;
delete N_obj_pointConstraint;
delete N_obj_orientConstraint;
pointConstraint -n Cube_pointConstraint CubeGroupSub N_obj;
orientConstraint -n Cube_orientConstraint CubeGroupSub N_obj;
return;
}
}
Если я правильно понял вам нужно, что бы когда мимо шарика пролетит кубик шарик прицепился к кубику и он улетел вместе с ним. И все это управляйлось анимированым атрибутом. Если это так то выражение будет выглядеть так :
сцена
Код:
int $cubSnap = pCube.snap_to;
if($cubSnap == 0)
{
pSphere1_pointConstraint1.pCubeW0 = 0;
}
if($cubSnap == 0)
{
pSphere1_pointConstraint1.pCubeW0 = 1;
}
сцена
Не то?
Код:
int $cubSnap = pCube.snap_to;
if($cubSnap == 0)
{
pSphere1_pointConstraint1.offsetX = pCube.translateX*(-1);
pSphere1_pointConstraint1.offsetY = pCube.translateY*(-1);
pSphere1_pointConstraint1.offsetZ = pCube.translateZ*(-1);
pSphere1_pointConstraint1.pCubeW0 = 0;
}
if($cubSnap == 1)
{
pSphere1_pointConstraint1.pCubeW0 = 1;
}
Извините, очень много работы и потому опоздал с ответом
Вот думаю это выражение будет работать даже если у сферы есть родитель в с другими значениями.
Посмотрите и если вопросы будут пишите.
Вот думаю это выражение будет работать даже если у сферы есть родитель в с другими значениями.
Посмотрите и если вопросы будут пишите.
Код:
// snap expression with offset - requiers vile sharik_kubik
int $cubSnap = pCube.snap_to;
if($cubSnap == 0){
pSphere1_pointConstraint1.offsetX = pCube.translateX*(-1);
pSphere1_pointConstraint1.offsetY = pCube.translateY*(-1);
pSphere1_pointConstraint1.offsetZ = pCube.translateZ*(-1);
float $pSphpX = pSpher1Parent.translateX;
float $pSphpY = pSpher1Parent.translateY;
float $pSphpZ = pSpher1Parent.translateZ;
// X
if($pSphpX<0)
{
pSphere1_pointConstraint1.offsetX = (pCube.translateX - $pSphpX)*(-1);
}
else if($pSphpX>0)
{
float $pSphPosX = pCube.translateX;
if($pSphPosX <0)
{
$pSphPosX = $pSphPosX*-1;
}
pSphere1_pointConstraint1.offsetX = ($pSphPosX + $pSphpX);
}
// Y
if($pSphpY<0)
{
pSphere1_pointConstraint1.offsetY = (pCube.translateY + $pSphpY);
}
else if($pSphpY>0)
{
float $pSphPosY = pCube.translateY;
if($pSphPosY <0)
{
$pSphPosY = $pSphPosY*-1;
}
pSphere1_pointConstraint1.offsetY = ($pSphPosY + $pSphpY);
}
// Z
if($pSphpZ<0)
{
pSphere1_pointConstraint1.offsetZ = (pCube.translateZ + $pSphpZ);
}
else if($pSphpZ>0)
{
float $pSphPosZ = pCube.translateZ;
if($pSphPosZ <0)
{
$pSphPosZ = $pSphPosZ*-1;
}
pSphere1_pointConstraint1.offsetZ = ( $pSphPosZ + $pSphpZ);
}
pSphere1_pointConstraint1.pCubeW0 = 0;
}
////
if($cubSnap == 1)
{
pSphere1_pointConstraint1.pCubeW0 = 1;
}
Извините, DEL, пока нет возможности очень подробно рассмотреть вашу сцену. Но у вас експр. работает с одним обьектом, а у меня их целых три, поэтому я решил делать переключение с помощью констрейнтов. Если мой скпипт запихнуть в експр, то он отлично срабатывает, единственный минус и весьма увесистый, так это тормоза системы, уж слишком он тяжелый для выражения. У меня родилась идея обьеденить експр. и МЕЛ. Создаем процедуру как в посте #5, а в экспр пишем: int $trg=0; если происходит изменение атрибута snap_to, то выполняем процедуру SwitchOffset и записываем некой переменной $trg=1, дальше по следующим кадрам експр начинает перебор кода и если $trg==1, то процедуру не выполняем, т.к. она выполнена.
З.Ы. Надеюсь я понятно изъяснился, потому что выглядит не очень ясно.
З.Ы. Надеюсь я понятно изъяснился, потому что выглядит не очень ясно.
вот написал экспрешном такой код. Будет ли он выполняться правильно? Нужно ли что-то добавить, чтобы небыло лишних срабатываний или недорабатываний?
int $chBox=Cube.snap_to;
//Это я создаю переменные-тригеры, которые будут проверять, выполнилось ли переключение, и если выполнилось, то его больше не надо выполнять в следующих кадрах до следующего переключения
int $trgW;
int $trgC;
int $trgS;
if($chBox==0)
{
if($trgW==0)
{
SwitchOffset;
$trgW=1;
$trgC=0;
$trgS=0;
}
}
if($chBox==1)
{
if($trgC==0)
{
SwitchOffset;
$trgW=0;
$trgC=1;
$trgS=0;
}
}
if($chBox==2)
{
if($trgS==0)
{
SwitchOffset;
$trgW=0;
$trgC=0;
$trgS=1;
}
}
А вообще вот сцена http://rapidshare.com/files/242901940/MySwitch.rar.html и посмотрите, кажеться все отлично работает!
int $chBox=Cube.snap_to;
//Это я создаю переменные-тригеры, которые будут проверять, выполнилось ли переключение, и если выполнилось, то его больше не надо выполнять в следующих кадрах до следующего переключения
int $trgW;
int $trgC;
int $trgS;
if($chBox==0)
{
if($trgW==0)
{
SwitchOffset;
$trgW=1;
$trgC=0;
$trgS=0;
}
}
if($chBox==1)
{
if($trgC==0)
{
SwitchOffset;
$trgW=0;
$trgC=1;
$trgS=0;
}
}
if($chBox==2)
{
if($trgS==0)
{
SwitchOffset;
$trgW=0;
$trgC=0;
$trgS=1;
}
}
А вообще вот сцена http://rapidshare.com/files/242901940/MySwitch.rar.html и посмотрите, кажеться все отлично работает!