안녕하세요.
애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.
지난번에 'ActionMan'을 이용하여 사용자 대화 상자를 만들었습니다.
그런데 버튼이 동작이 원하는대로 작동하지 않기 때문에 오늘은 이것을 개량해 보겠습니다.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
|
rollout actionMan_Rollout "ActionMan"
(
checkbutton fig_chb "피규어"
checkbutton comHori_chb "좌우"
checkbutton comVert_chb "상하"
checkbutton conRot_chb "회전"
checkbutton conLock_chb "잠금"
checkbutton tra_chb "점선"
checkbutton addKey_chb "키"
on fig_chb changed state do
(
actionMan.executeAction 972555510 "40144"
)
on comHori_chb changed state do
(
actionMan.executeAction 972555510 "40019"
)
on comVert_chb changed state do
(
actionMan.executeAction 972555510 "40020"
)
on conRot_chb changed state do
(
actionMan.executeAction 972555510 "40021"
)
on conLock_chb changed state do
(
actionMan.executeAction 972555510 "40185"
)
on tra_chb changed state do
(
actionMan.executeAction 972555510 "40160"
)
on addKey_chb changed state do
(
actionMan.executeAction 972555510 "40015"
)
)
createdialog actionMan_Rollout
|
cs |
위 내용은 이전시간까지 작업한 내용과 결과 물입니다.
2개의 문제점 중 하나는 다음 이미지와 같습니다.
맥스의 아이콘과 사용자 정의 대화 상자의 실행 비실행이 맞지 않습니다.
해결 방법으론 사용자 대화상자의 상태를 기준으로 맥스의 아이콘을 맞추도록 하면 될 것 같습니다.
즉 피규어 체크 버튼이 false상태에서 true상태로 바뀔 때 맥스의 피규어 버튼이 false 상태라면 같이 true로 바꾸고
피규어 체크 버튼이 false상태에서 true상태로 바뀔 때 맥스의 피규어 버튼이 true 상태라면 변경하지 않습니다.
수정 작업을 하기 전에 세 가지 명령을 배우겠습니다.
<Interface>actionMan.getActionTable <index>index
인덱싱 된 작업 테이블의 <MixinInterface : ActionTable>을 반환합니다.
인덱스는 1에서 actionMan.numActionTables까지의 범위에 있어야 합니다.
어려운 말인데 아래 그림과 함께 보면 이해하기 쉽습니다.
위 명령어는 위 이미지에 있는 빨간색으로 칠해진 ID 값을 입력하여 그 하위 테이블의 아이템이 접근할 수 있는 중간다리 역할을 합니다.
numActionTables은 이미지 제일 첫 줄에 나와 있는 것과 같이 82가 됩니다.
위 명령어로 반환된 결괏값이 차후에 사용되는 '<ActionTable>'이 됩니다.
<Interface><ActionTable>.getActionItem <index>index
인덱싱 된 작업 항목의 <MixinInterface : ActionItem>을 반환합니다.
인덱스는 1과 <ActionTable> .numActionItems 사이 여야 합니다.
위 이미지의 초록색 부분의 ID값을 입력하여 해당하는 아이템을 사용합니다.
위 명령어로 반환된 결괏값이 차후에 사용되는 '<ActionItem>'이 됩니다.
<ActionItem>.isEnabled : boolean : Read
선택한 액션 아이템의 상태가 사용 중인지 아닌지를 확인해줍니다.
오직 읽을 수만 있습니다.
방금 배운 명령어로
'biped'명령이 있는 ActionTable에서,
피규어부분인 'ActionItem'에 접근하여,
해당 ActionItem이 활성화됐는지를 확인하면,
처음의 문제점을 해결하는 방법을 해결할 수 있는 방법을 찾을 수 있습니다.
즉 다음과 같이 사용하면 맥스의 피규어 아이콘이 활성화 유무를 알 수 있습니다.
1
|
((actionMan.getActionTable 79).getActionItem 1).isChecked
|
cs |
결과 값으론 활성화면 true, 비활성 화면 false가 반환됩니다.
이것을 if문을 사용해서 서로 매칭이 되냐 아니냐로 결과를 변경하면 됩니다.
1
2
3
4
5
6
7
|
on fig_chb changed state do
(
if(((actionMan.getActionTable 79).getActionItem 1).isChecked != state) do
(
actionMan.executeAction 972555510 "40144"
)
)
|
cs |
새로 수정된 부분을 보겠습니다.
머릿속으로 생각을 하면
우선 사용자 정의 대화 상자가 생성되며 피규어 버튼도 만들어집니다.
피규어 버튼은 우선 눌려 있지 않기 때문에 'false'상태입니다.
여기서 피규어 버튼을 누르면 상태가 변경되면서 'on fig_chb changed state do'이벤트가 발동합니다.
상태가 변경됐기 때문에 피규어 버튼은 'true'가 됩니다.
3번 라인의 'if'문을 통해 현재 맥스의 피규어 아이콘의 상태와 피규어 버튼의 상태를 비교합니다.
피규어 아이콘이 'false'라면 'false'와 'true'가 서로 다르기 때문에 작동을 하게 됩니다.
저와 같은 그래픽 디자이너라면 살짝 어려워 보일 겁니다. (아니라면 논리적인 머리도 가지셨습니다.)
우리가 시각적으로 인지하는 것과 결과의 사이에 'on fig_chb changed state do'이벤트가 발동한다는 것만 기억한다면 충분히 이해하실 수 있습니다.
결과는 둘이 다르더라도 동일하게 작동해서 만족스럽습니다.
이제 나머지 부분도 적용해 보겠습니다.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
rollout actionMan_Rollout "ActionMan"
(
checkbutton fig_chb "피규어"
checkbutton comHori_chb "좌우"
checkbutton comVert_chb "상하"
checkbutton conRot_chb "회전"
checkbutton conLock_chb "잠금"
checkbutton tra_chb "점선"
button addKey_btn "키"
on fig_chb changed state do
(
if(((actionMan.getActionTable 79).getActionItem 1).isChecked != state) do
(
actionMan.executeAction 972555510 "40144"
)
)
on comHori_chb changed state do
(
if(((actionMan.getActionTable 79).getActionItem 21).isChecked != state) do
(
actionMan.executeAction 972555510 "40019"
)
)
on comVert_chb changed state do
(
if(((actionMan.getActionTable 79).getActionItem 23).isChecked != state) do
(
actionMan.executeAction 972555510 "40020"
)
)
on conRot_chb changed state do
(
if(((actionMan.getActionTable 79).getActionItem 22).isChecked != state) do
(
actionMan.executeAction 972555510 "40021"
)
)
on conLock_chb changed state do
(
if(((actionMan.getActionTable 79).getActionItem 26).isChecked != state) do
(
actionMan.executeAction 972555510 "40185"
)
)
on tra_chb changed state do
(
if(((actionMan.getActionTable 79).getActionItem 20).isChecked != state) do
(
actionMan.executeAction 972555510 "40160"
)
)
on addKey_btn pressed do
(
actionMan.executeAction 972555510 "40015"
)
)
createdialog actionMan_Rollout
|
cs |
어이쿠 만들고 보니 마지막 키 버튼은 일반 버튼으로 했어야 했네요. ㅎㅎㅎ
다음 시간에는 좌우, 상하, 회전, 잠금 버튼을 맥스의 버튼과 비슷하게 동작하도록 하겠습니다.
'맥스스크립트 심화' 카테고리의 다른 글
선택한 노드 Controller 변경하기(3) (0) | 2021.04.21 |
---|---|
선택한 노드 Controller 변경하기(2) (0) | 2021.04.20 |
선택한 노드 Controller 변경하기(1) (3) | 2021.04.19 |
actionMan을 이용한 대화상자(3) (0) | 2021.04.16 |
actionMan을 이용한 대화상자(1) (0) | 2021.04.14 |
RolloutCreator Functions(6) (0) | 2021.04.12 |
RolloutCreator Functions(5) (0) | 2021.04.09 |
RolloutCreator Functions(4) (0) | 2021.04.08 |