안녕하세요.
애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.
정말 오래간만에 글을 올립니다.
이런저런 핑곗거리는 많겠지만, 그냥 쉬다 보니 계속 쉬게 되었습니다.
잡설은 넘어가고 본론으로 들어가도록 하죠.
맥스로 작업을 하다보면 가끔 자동으로 어떤 행동이 실행됐으면 좋겠다는 생각이 들 때가 있습니다.
예를 들면 새 맥스파일을 열었을 때 자동으로 뷰포트 레이아웃이 4개로 정리된다거나 혹은 헬프 파일을 숨겨주는 것처럼 말입니다.
이렇게 어떤 이벤트가 발생하면 이것을 감지해서 자동으로 실행하는 명령어를 Callback이라고 합니다.
맥스에는 자동으로 감지할 수 있는 이벤트의 수가 많기 때문에 이 Callback의 종류도 상당히 많습니다.
자동으로 무언가를 실행하기 때문에 상당히 편할 것 같긴 하지만 원치 않을 때 자동으로 실행되니 생각보다 불편한 경우도 많습니다.
그리고 실행조건을 프레임 변경으로 하면 매 프레임 사이에 작동을 하기 때문에 프레임 레이트를 떨어 뜨리기도 하거나 잘못 사용할 경우 메모리를 누수시키거나 맥스의 속도를 떨어 뜨릴 수 있습니다.
그 외에도 생각지 못한 문제를 발생시 킬 수 있기 때문에 사용에는 고민이 필요한 명령어이기도 합니다.
그럼에도 불구하고 잘 사용하면 매우 편하고 강력한 명령이기 때문에 익혀 두신다면 아주 요긴하게 쓰실 수 있습니다.
저도 Callback는 아주 가끔 사용하다 보니 미숙하고 사용하기 까다롭지만, 여러분에게 설명을 하면서 다시 기초를 다져볼까 합니다.
Adding Callbacks
Callbck의 추가콜백은 다음과 같은 방식을 사용하여 추가합니다.
callbacks.addScript <callback_type_name> (<script_string> | <script_stringstream> | fileName:<filename_string>) [id:<name>] [persistent:<boolean>]
보기만 해도 복잡해 보이니 어떤 내용인지 하나하나 알아보도록 하겠습니다.
callbacks.addScript는 addScript를 이용하여 callback을 추가하겠다는 의미입니다.
<callback_type_name>은 어떤 형식의 callback인지 적어줍니다. 적을 때 '#~' 이런 형식을 사용되는 것으로 보아 배열 형태로 되어 있는 것 같습니다.
(<script_string> | <script_stringstream> | fileName:<filename_string>)은 callback이 호출될 때 실행될 내용의 Script를 적어줍니다. 또는 파일 이름으로도 대체할 수 있습니다. 이 부분이 자동으로 실행됐으면 하는 명령을 찾아갈 수 있도록 하는 곳입니다.
id:<name>은 id이름을 지정합니다. 이 부분은 사용 여부를 선택할 수 있고 id를 지정할 경우 지정된 id를 단일 혹은 그룹으로 지정하여 한꺼번에 제거할 수 있습니다. 저는 일단 적어 놓기는 하는데 그룹으로 지정한 적은 없어서 자세히는 모르겠네요.
persistence : <boolean>는 해당 callback을 맥스 파일에 같이 저장하여 해당 파일을 열 때 자동으로 실행이 됩니다. 이 부분은 사용해본 적이 없는 기능이네요. 개인적으로 순수 맥스 데이터 외의 것을 저장하고 불러오고 싶은 경우 외부에 파일을 생성하여 불러오는 방식을 사용합니다.
사용방법을 알았으니 우선 간단하게 사용해 보도록 하겠습니다.
MaxScript Editor를 열고 다음과 같이 입력해 봅시다.
1
2
3
4
5
6
|
fn messgebox_fn =
(
messagebox "animation On"
)
callbacks.addScript #animateOn "messgebox_fn()" id:#myanimationOn
|
cs |

그 후에 맥스창에서 Auto Key버튼을 클릭하면 다음과 같은 메시지 창이 나옵니다.
신기하신가요?
그럼 어떤 방식으로 동작하는지 알아보겠습니다.
1 ~ 4번 라인의 fn messgebox_fn = (...)은 어디선가 불러 쓸 수 있는 함수를 정의하였습니다.
3번 라인의 messagebox "animation On" 함수의 안에 있는 내용은 메시지 박스를 열고 그 안에 'animation On'이라는 문자를 출력하라입니다.
이 부분까지는 사실 아무 동작을 하지는 않습니다.
단지 함수로 정의되었기 때문에 대기 중이라고 생각하시면 됩니다.
그 아래 라인인 6번 라인인 에서 동작을 시켜 줍니다.
callbacks.addScript #animateOn "messgebox_fn()" id:#myanimationOn의 내용은 callbacks.addScript로 callback를 추가하고 형식은 animateOn(애니메이션 버튼이 켜졌을 때)을 사용하고, 이때 실행될 내용은 미리 정의 한 messgebox_fn()을 사용합니다.(이 부분에 직접 코딩을 할 수 있다고는 하지만 저는 사용해 본 적은 없네요.)
그리고 id를 id:#myanimationOn이라고 적어 줬습니다.(id명은 따로 정해진 것이 아니라 '#'뒤에 원하는 이름을 적어 주면 됩니다. 물론 맥스에서 이미 정의되어 있는 이름과 겹친다면 문제가 생길 것이라 예상됩니다.)
오늘은 Callback의 소개와 사용하는 방법에 대해서 알아보았습니다.
다음에는 사용하는 것보다 중요한 삭제하는 방법과 callback의 형식에 대해서 알아보도록 하겠습니다.
'맥스스크립트 기본' 카테고리의 다른 글
Callback(5) : Animation / Direct3D / FileLink Device Notification (0) | 2021.02.02 |
---|---|
Callback(4) :콜백 이벤트 명과 notificationParam 반환(ActionItem) (0) | 2021.02.01 |
Callback(3) : 확인 (0) | 2021.01.31 |
Callback(2) : 삭제 (0) | 2021.01.30 |
Wire Parameter(2) (0) | 2019.12.17 |
Wire Parameter(1) (0) | 2019.12.16 |
Constraints - Path(5) (0) | 2019.11.29 |
Constraints - Path(4) (0) | 2019.11.28 |