맥스스크립트 기본

Biped Vertical_Horizontal_Turn(Body):Matrix3 Controller(2)

스크립팅하는애님 2021. 3. 8. 21:20
728x90
반응형

안녕하세요.

애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.

지난 시간에 이어서 오늘도 바이패드의 Vertical_Horizontal_Turn에 대해서 이야기합니다.

 

오늘도 바이패드를 하나 만들고 시작하겠습니다.

 

 

<biped_ctrl>.arms Boolean Default: True

바이패드 팔의 유무를 확인하거나 변경할 수 있습니다. 다음과 같이 입력하고 확인해 보겠습니다.

 

1
$'bip001'.controller.arms
cs

 

팔이 이미 존재하기 때문에 'true'라고 나옵니다.

그렇다면 값을 변경해서 팔을 없애 보겠습니다.

다음과 같이 입력하여 확인해 보겠습니다.

 

1
$'bip001'.controller.arms = false
cs

 

 

팔이 없어졌습니다.

혹시 팔이 없어지지 않고 MAXScript Listener에 다음과 같은 오류 메시지가 나오나요?

바이패드는 체형을 바꿀 때 피규어모드에서 바꾸게 되는데 피규어 모드가 아니면 오류를 발생합니다.

피규어모드로 바꾸고 실행하시면 됩니다.

 

한 가지 더 지금 이야기하고 있는 것은 바이패드의 최상위 노드인 COM을 기준으로 이야기를 하는 것이기 때문에 바이패드의 다른 노드를 선택하면 에러가 발생합니다.

여기서 '그렇다면 COM의 이름을 모르면 어떻게 적용하는가?'를 생각하게 되는데 그 부분이 이전 시간에 이야기한 것과 연결이 됩니다.

예를 한 가지 예를 들어보겠습니다.

지금 선택한 COM의 이름을 알 수 없는 바이패드의  팔이 있는지 없는지 알아보는 방법에 대해서 이야기하겠습니다.

 

우선 바이패드 아무 부위나 하나 선택하고 다음과 같은 방식으로 스크립트를 짜 보도록 하겠습니다.

1 지금 선택한 바이패드의 COM이름을 확인한다.

2 확인한 COM이름으로 선택한 바이패드의 팔의 정보를 확인한다.

3 보너스로 팔이 없으면 생성하고 있으면 삭제한다.

 

MAXScript Editer에서 다음과 같이 입력하고 그 결과를 확인해 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
rootObj = $.controller.rootNode
rootObjCtrl = rootObj.controller
isArm = rootObjCtrl.arms
rootObjCtrl.figureMode = true
if(isArm == true) then 
(
    rootObjCtrl.arms = false
)
else
(
    rootObjCtrl.arms = true
)
rootObjCtrl.figureMode = false
cs

 

1번 라인 : 현재 선택한 노드의 최상위 노드(COM)를 찾아 rootObj 변수에 넣습니다.

2번 라인 : 찾아낸 최상위 노드(COM)의 Controller를 찾아 rootObjCtrl 변수에 넣습니다.(꼭 할 필요는 없지만 자주 쓰이는 값은 변수에 넣어주면 재사용할때 편하니 습관화 하면 좋습니다.)

3번 라인 : 찾아낸 최상위노드(COM)의 Controller의 하위 정보인 Arm에서 팔의 존재를 확인하여 결과 값을 isArm변수에 넣습니다.

4번 라인 : 바이패드 구조가 변경될 것이기 때문에 피규어모드로 변경합니다.

5 ~ 8번 라인 : isArm값이 true(즉 팔이 있으면) 팔을 없앱니다.

9 ~ 12번 라인 : 5 ~ 8라인에 해당하지 않는 경우(팔이 없으면) 팔을 만들어 줍니다.

13번 라인 : 피규어모드를 해제합니다.

 

치킨이 왔네요.

오늘은 여기까지 하겠습니다. ㅎㅎ

728x90
반응형