3D MAX는 여러가지 UI가 존재하는데, 이미 만들어진 UI들을 제외하고 본인이 직접 UI를 만들어 프로젝트나 자신에게 제일 효율적인 UI를 따로 작성해 작업을 하는것이 좋습니다.
그러기 위해서 가장 기본적인 UI 창을 생성하고 UI가 어떻게 어떠한 방식으로 생성되는지 기초적인 부분부터 알아보려 합니다.
Dialog, RolloutFloater, Utilities
맥스의 기본이 되는 UI를 생성하는 방법은 다이얼로그(Dialog) 와 롤아웃 플로터(RolloutFloater) 그리고 기본 UI 중 우측에 있는 커맨드 패널(Command Panel) 의 유틸리티(Utilities) 메뉴에 새로운 UI를 생성하는 것 입니다.
다이얼로그는 롤아웃 플로터를 제외한 디스플레이 옵션이나 배경 비트맵, 마우스 이벤트 핸들러와 같은 고급 기능을 제공을 제공합니다.
롤아웃 플로터는 커맨드 패널을 만들어 패널 안의 기능들을 숨기거나 나타나게 할 수 있도록 사용자가 UI를 직접 조절 할 수 있게 만들 수 있습니다.
유틸리티는 3D MAX가 기본 제공한 커맨드 패널에 있는 유틸리티 탭으로 작성한 UI를 이용해 기존에 익숙하던 방식으로 메뉴에 접근하게 할 수 있도록 만들 수 있습니다.
Dialog
rollout TestRollout "TintanaMenu"
(
)
CreateDialog TestRollout
기본적으로 맥스의 UI를 만들때 쓰이는 롤아웃(Rollout) 함수를 통해 기초적인 UI를 만들 수 있습니다.
rollout <다이얼로그명(함수명)> <"타이틀명">
이렇게만 지정해 주어도 가장 기본적인 3D MAX의 UI를 생성 할 수 있습니다.
마지막 줄에 CreateDialog 를 붙여 해당 UI가 다이얼로그로써 기능을 할 수 있도록 롤아웃 함수명을 가져와 다이얼로그로 전환시켜줍니다.
rollout ButtonTest "Tintana Menu"
(
button TestButton " Tintana's Button "
on TestButton pressed do
(
messageBox " Onlien "
)
)
CreateDialog ButtonTest
롤아웃 함수 안에 다양한 기능의 UI 형태를 추가해 줄 수 있는데, 그중 가장 간단한 button(버튼) 함수를 이용해 기본적인 버튼형 UI를 만들어 줄 수 있습니다.
button <버튼명(함수명)> <"버튼 이름">
버튼을 만들고 나서 on <이름> pressed do 구문에서 버튼을 눌렀을 때 어떤 동작을 할 것인가를 지정해 줄 수 있습니다.
버튼을 눌렀을 때 messageBox 에 적힌 문자열을 출력하는 명령어를 넣어서 버튼이 동작했을 때 메세지를 출력하게 할 수 있습니다.
이를 조금 응용하면 버튼을 눌렀을 때, 오브젝트가 생성되게 할 수도 있습니다.
맥스 스크립트 리스너 (MAXscript Listener) 에서 기록된 특정 동작을 가져와도 잘 작동합니다.
RolloutFloater
rollout FloaterTest01 " Rollout01 "
(
)
rollout FloaterTest02 " Rollout02 "
(
)
rollout FloaterTest03 " Rollout03 "
(
)
rollout FloaterTest04 " Rollout04 "
(
)
_AddFloater = newRolloutFloater "FloaterMeny" 200 200
addRollout FloaterTest01 _AddFloater
addRollout FloaterTest02 _AddFloater
addRollout FloaterTest03 _AddFloater
addRollout FloaterTest04 _AddFloater
롤아웃 플로터를 작성 할 때에는 각 롤아웃이 별개의 기능을 가지도록 rollout 함수를 여러개 만들어 주는 것 입니다.
여러개의 롤아웃을 한꺼번에 통합해주기 위해서는 다음과 같은 변수를 선언해야 합니다.
(변수명) = newRolloutFloater <"커맨드 패널 이름"> 가로크기 세로크기
변수를 선언하고 나서, 모든 롤아웃 메뉴를 한개의 패널에 그룹화 시키기 위해선 다음과 같이 입력합니다
addRollout <rollout 의 함수명> <newRolloutFloater 의 변수명>
addRollout 를 통해서 롤아웃의 함수명과 롤아웃 플로터의 함수명을 같이 써주면 하나의 패널에 여러개의 롤아웃이 사진과 같이 정렬됩니다.
rollout TestRollout_Strat "TintanaMenu_Strat"
(
button TestRollout_Strat " Start " width:130 height:30
on TestRollout_Strat pressed do
(
messageBox " GO! "
)
)
rollout TestRollout_Stop "TintanaMenu_Stop"
(
button TestRollout_Stop " Stop " width:130 height:30
on TestRollout_Stop pressed do
(
messageBox " Don't do it ! "
)
)
rollout TestRollout_Speed "TintanaMenu_Speed"
(
slider panel01 "Speed" orient:#vertical across:2
slider panel02 "Fuel" orient:#vertical
)
myRolloutFloater = newRolloutFloater " T_Menu " 300 300
addRollout TestRollout_Strat myRolloutFloater rolledUp:true
addRollout TestRollout_Stop myRolloutFloater
addRollout TestRollout_Speed myRolloutFloater
롤아웃의 여러가지 기능을 넣었을 때의 보이는 UI입니다.
여기서 버튼의 가로세로 크기를 조절해서 이전보다 좀 더 커보이게 만들었는데 버튼의 모양을 다음과 같이 커스텀 할 수 있습니다.
button <버튼명(함수명)> <"버튼 이름"> pos:[x축 위치, y축 위치] width:버튼 가로크기 heigh:버튼 세로크기
버튼의 포지션 설정을 안하면 기본적으로 사용자가 설정한 UI의 센터에 정렬됩니다.
반응형 UI에는 버튼만 있는것이 아니며 Slider 등을 사용해서 자신에게 맞는 UI를 설정할 수 있습니다.
버튼마다 자세한 타입 설정이나 사용 방법은 다음과 같은 사진처럼 MaxScript Help 에서 찾아 볼 수 있습니다.
Utilities
utility TestRollout "Utilities Rollout"
(
button TestButton "Utilities Button"
on TestButton pressed do
(
messageBox " ! ! ! ! "
)
)
CreateDialog TestRollout
롤아웃을 생성 할 때, rollout 함수를 쓰지 않고도 utility 함수를 써서 UI를 만들어도 됩니다.
그래서 롤아웃 함수를 쓴 것이랑 무슨 차이가 있나 싶지만, utility 함수를 쓰게 되면 맥스가 기본적으로 제공해줬던 커맨드 탭에서 해당 UI를 열어 줄 수 있습니다.
해당 코드를 실행 시켰을 때 다른 다이얼로그나 롤아웃 플로터처럼 정상적인 UI가 화면 어딘가에 뜨게 되는 것을 알 수 있습니다.
이후, 우측 커맨트 패널의 Utilities 탭에서 MaxScript 항목을 활성화 시키고, 유틸리티의 메뉴 목록을 열어보면 위 코드에서 지어줬던 툴팁의 이름이 나타나는걸 확인 할 수 있습니다.
메뉴를 클릭하면, Utilities 탭에서 내가 작성한 새로운 UI가 커맨드 탭에 추가된것을 알 수 있습니다.
이런식으로 메뉴를 구분짓고 세분화 시켜서 좀더 쾌적한 UI설정을 할 수 있습니다.
지금까지 MAX Script 를 구성하기 위한 기본적인 UI 세팅과 생성에 대해서 알아보았습니다.
이 글에서의 참조한 MAXScript Help 키워드
Rollout User-Interface Controls Types
Utility and Rollout Properties, Methods, and Event Handlers
Rollout Floater Windows
Button UI Control
'3D MAX > 3D MAX Script' 카테고리의 다른 글
[3D MAX] macro script로 특정 작업 반복 단축키 만들기 (0) | 2021.08.12 |
---|---|
[애니메이션] Expression 의 기초적인 기능들 (0) | 2021.04.25 |