맥스스크립트 심화

선택한 노드 Controller 변경하기(3)

스크립팅하는애님 2021. 4. 21. 19:17
728x90
반응형

안녕하세요.

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

이번에는 '선택한 노드 Controller 변경하기'를 마무리 짓겠습니다.

 

이전 시간에 배운 내용은 아래와 같습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
rollout controllerChange_Rollout "ControllerChange"
(
    radiobuttons changePos_rbt "Pos 변경" columns:1 labels:#("변경없음", "position XYZ", "TCB") pos:[5, 5]
    radiobuttons changeRot_rbt "Rot 변경" columns:1 labels:#("변경없음", "Euler XYZ", "TCB") pos:[90, 5]
    button run_btn "실행"
    
    on run_btn pressed do
    (
        if(changePos_rbt.state == 2) then
        (
            $.position.controller = Position_XYZ()            
        )        
        else if(changePos_rbt.state == 3) then
        (
            $.position.controller = TCB_Position()
        )
        
        if(changeRot_rbt.state == 2) then
        (            
            $.rotation.controller = Euler_XYZ()
        )
        else if(changeRot_rbt.state == 3) then
        (  
            $.rotation.controller = TCB_Rotation()          
        )
    )    
)
createdialog controllerChange_Rollout 
cs

 

 

이전 시간과는 다르게 오브젝트를 조금 더 만들어 보겠습니다.

 

대충 이렇게 만들었습니다.

 

지금까지는 '$'라는 문자를 써서 현재 선택한 단일 오브젝트에만 적용하도록 했습니다.

지금부터는 단일 오브젝트가 아닌 현재 선택한 복수 오브젝트를 대상으로 적용되도록 해 보겠습니다.

'on run_btn pressed do'의 이벤트 핸들러를 수정해보겠습니다.

우선 '현재 선택된 오브젝트'는 다음과 같습니다.

selection as array

이것을 변수에 저장하면 해당 변수에 현재 선택된 오브젝트를 스크립트에서 쉽게 사용할 수 있습니다.

 

원본 스크립트의 8번과 9번 라인사이에 다음을 추가해줍니다.

 

1
selectAllOBJ = selection as array
cs

 

지금은 실행해 봤자 달라진 부분은 없습니다.

오히려 이상한 결과가 나올 수 있으니 실행하지 말아 주세요.

 

다음으로 선택한 오브젝트를 for문으로 돌면서 해당 오브젝트의 내용을 변경하도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
rollout controllerChange_Rollout "ControllerChange"
(
    radiobuttons changePos_rbt "Pos 변경" columns:1 labels:#("변경없음", "position XYZ", "TCB") pos:[5, 5]
    radiobuttons changeRot_rbt "Rot 변경" columns:1 labels:#("변경없음", "Euler XYZ", "TCB") pos:[90, 5]
    button run_btn "실행"
    
    on run_btn pressed do
    (
        selectAllOBJ = selection as array
        
        for i = 1 to selectAllOBJ.count do
        (
            if(changePos_rbt.state == 2) then
            (
                selectAllOBJ[i].position.controller = Position_XYZ()            
            )        
            else if(changePos_rbt.state == 3) then
            (
                selectAllOBJ[i].position.controller = TCB_Position()
            )
            
            if(changeRot_rbt.state == 2) then
            (            
                selectAllOBJ[i].rotation.controller = Euler_XYZ()
            )
            else if(changeRot_rbt.state == 3) then
            (  
                selectAllOBJ[i].rotation.controller = TCB_Rotation()          
            )
        )
    )    
)
createdialog controllerChange_Rollout 
cs

 

이제 정상적으로 작동하는지 실행해 보겠습니다.

스샷으로는 보여 드리기가 애매 하지만 저는 잘 작동하고 있습니다. ㅎㅎㅎ

 

여러분이 더 필요한 기능이 있으시면 더 추가하여 사용하면 좋을 것 같습니다.

'선택한 노드 Controller 변경하기'는 여기서 마치겠습니다.

728x90
반응형