맥스스크립트 심화

RolloutCreator Functions(4)

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

안녕하세요.

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

오늘은 이전에 만든 버튼에 실제 오브젝트가 연동하는 것을 알아보려고 합니다.

 

이전에 작업한 스크립트의 내용은 아래와 같습니다.

 

1
2
3
4
5
6
7
8
9
10
rci = rolloutCreator "BoxButton_Rollout" "Box Button"
rci.begin()
 
totalObj = $* as array
for i = 1 to totalObj.count do
(
    btnName = execute("#boxButton_btn" + (i as string))
    rci.addControl #button btnName "박스"
)
createDialog (rci.end())
cs

 

버튼이 작동하려면 이벤트 핸들러가 있어야 겠네요.

간단하게 버튼 클릭으로 이벤트 핸들러를 정하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fn fn_action objNm =
(
    format "% 오브젝트와 연결되어 있습니다.\n" objNm
)
 
 
rci = rolloutCreator "BoxButton_Rollout" "Box Button"
rci.begin()
 
totalObj = $* as array
for i = 1 to totalObj.count do
(
    btnName = execute("#boxButton_btn" + (i as string))
    rci.addControl #button btnName "박스"
    objectName = totalObj[i].name
    rci.addHandler btnName #pressed codeStr: ("fn_action " +"@" + objectName + "@") filter:on
)
createDialog (rci.end())
cs

 

 

대화창의 버튼을 위에서부터 순서대로 누르면 다음과 같이 결과가 나옵니다.

 

검은색 글씨에 주목하세요.

 

각 버튼과 연결된 박스의 이름이 나옵니다.

 

추가된 스크립트의 내용을 설명하자면

1 ~ 4번 라인의 사용자 정의 함수는 외부에서 호출할 때 추가되는 인수 값을 받아 format문으로 출력하는 내용입니다.

15번 라인의 내용은 버튼 UI를 만들 때 해당 박스의 이름을 objectName 변수에 저장해 둡니다.

16번 라인의 내용은 버튼 UI의 이벤트 핸들러를 생성하며, 버튼이 클릭되면 fn_action 함수를 호출합니다.

호출할 때 인자로 변수 objectName을 추가합니다.

 

여기에 한 가지 난해한 부분이 있는데 정확하게는 저도 잘 모르는 내용입니다.

codeStr: ("fn_action " +"@" + objectName + "@")

이 부분에서 @를 사용했는데요.

기존 설명에서는 @를 "대용으로 쓴다고 했습니다.

하지만 그럴 경우에는 

codeStr: "fn_action objectName "

라고 적으면 될 것 같지만 실제로 작성하면 다른 결과 값을 보여줍니다.

 

 

이전에 작업한 것과 동일하게 버튼을 위에서 아래로 순서대로 클릭했지만 다른 결과 값을 보여 줍니다.

 

여기서 생각할 수 있는 것은 변수가 입력되는 부분은 @로 감싸 줘야 한다는 것이고,

'codeStr'에는 문자열만 들어갈 수 있기 때문에 @를 "로 감싸야한다는 것입니다.

그리고 마지막으로 'codeStr'는 하나의 문자열로 입력해야 하기 때문에 ()로 묶어야 정상적으로 작동한다는 것입니다.

 

이 부분은 맥스 헬퍼로도 해결을 할 수 없어서 구글링을 하다 해외 사이트에서 사용 예제를 발견한 내용이라 설명 부분은 실제와 다를 수 있습니다.

 

이제 여기서 끝을 낼 수 있겠지만, 조금 더 예쁘게 꾸미고 싶은 욕심이 생기네요.

다음 시간에는 버튼의 이름과 위치를 바꿔 보도록 하겠습니다.

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

728x90
반응형