본문 바로가기
  • 열린 배움 프로젝트
3D Max

나만의 3dMax Script 만들기, 실제 활용법 정리

by From.h 2025. 5. 15.
728x90
반응형

 

3dMax Script 만들기, 실제 활용법 정리 

 

 

 

smvfx님과 moho님의 유튜브를 참조했습니다. 

자세한 내용은 아래 영상을 참고하세요.

세부 코드는 일부 변형하여 응용했습니다.

https://www.youtube.com/watch?v=H030WBIfzF8

https://www.youtube.com/watch?v=z5k19xseD_U

 

 

 

 

 

1 스크립트 작성

2 스크립트 실행

3 버튼 메뉴 생성

4 매크로 스크립트 만들기

5. UI 세팅 및 사용

 

 

 

 

 

 

 

 

1. 스크립트 작성

Max 상단 메뉴 Scripting 에서 아래 2종류의 창을 띄움

 

1) MAXScript Listener... > 코드 작성과 실행을 동시에 해 볼 수 있는 창

2) MAXScript Editor...  > 코드 작성과 저장, 실행을 하는 창

 

-여기에서 주로 editor 창을 사용할 예정

 

 

 

 

3) 코드 작성 예시

 

- 선택한 여러 오브젝트 피봇을 한 번에 "최하단" 정렬하는 기능

obj=selection as array
for items in obj do
items.pivot=[items.center.x,items.center.y,items.min.z]

 

해석:

1줄 = 선택한 복수의 오브젝트를 배열로 할당한다

2줄 = 아이템 개수만큼 반복하여 실행한다

3줄 = 아이템의 피봇을 z축 min으로 변경한다

 

 

 

 

 

 

 

 

 

2. 스크립트 실행


오브젝트를 선택한 상태로,  스크립트 에디터 창에 코드를 작성 후,  단축키를 누르면 바로 실행됨

단축키 :  Ctrl + E 

 

> 피봇 축이 모두 하단으로 바뀌었음

 

 

 

 

 

 

 

 

3. 버튼 메뉴 생성

 

1) 버튼 UI를 생성하는 기본 코드 양식

rollout 스크립트 명칭 "롤아웃 명칭"
(
    button a "버튼명" width:너비
    button b "버튼명" width:너비
    button c "버튼명" width:너비
)

 

1) 스크립트 명칭 : 원하는 스크립트 명을 직접 기입함

2) 롤아웃 명칭 : 실제 롤아웃 화면의 이름을 직접 기입함

3) 버튼명 : 기능 실행할 각각의 버튼이름을 직접 기입함

4) 너비 : 버튼의 가로 폭을 숫자로 지정함

 

 

 

2) 버튼 적용 예시

 

- 3개의 버튼 (btn1~3)에 피봇 중앙, 하단, 상단 정렬할 이름을 지어서 기입

- 너비를 작성.

- 그 아래에 작성한 함수(fn)는 각 버튼의 기능을 정의했음

-- Pivot Change라는 이름으로 롤아웃을 명명함
rollout junscript "Pivot Change"
(
-- 3개의 버튼 UI를 생성함
    button btn1 "center" width:80
    button btn2 "bottom" width:80
    button btn3 "top" width:80
    
-- 선택한 오브젝트를 중앙, 하단, 상단 정렬하는 명령을 3개의 case로 정의함-- 
    fn movePivotTo mode =
    (
        obj = selection as array
            for items in obj do
            (
                case mode of
                (
                    1: items.pivot = [items.center.x, items.center.y, items.center.z]
                    2: items.pivot = [items.center.x, items.center.y, items.min.z]
                    3: items.pivot = [items.center.x, items.center.y, items.max.z]
                )
            )
    )
    
-- 3개의 버튼을 누르면 각각 case가 실행되도록 정의함--
    on btn1 pressed do
        movePivotTo 1
    
    on btn2 pressed do
        movePivotTo 2
    
    on btn3 pressed do
        movePivotTo 3
)
-- 롤아웃을 생성함
createDialog junscript

 

 

 

- 스크립트 창에서 ctrl + E 누르면 롤아웃 버튼이 팝업됨

- 롤아웃 팝업 창의 이름 'Pivot Change'를 확인할 수 있음

- 각각의 버튼 명을 확인할 수 있음

- 각각의 버튼에 해당하는 기능이 실행됨을 확인할 수 있음

 

 

 

 

 

 

 

 

4. 예외처리

 

1) 선택된 객체가 없으면 알림창을 띄워주기

if obj.count == 0 then
            messageBox "Select Some Objects" title:"Warning"
else

 

 

 

 

2) 롤아웃 중복 실행 방지하기

try (destroydialog junscript) catch()

 

 

 

3) 최종 코드 확인 

-- 롤아웃 팝업 중복 방지 --
try (destroydialog junscript) catch()

-- Pivot Change라는 이름으로 롤아웃을 명명함
rollout junscript "Pivot Change"
(
-- 3개의 버튼 UI를 생성함
    button btn1 "center" width:80
    button btn2 "bottom" width:80
    button btn3 "top" width:80
    
-- 선택한 오브젝트를 중앙, 하단, 상단 정렬하는 명령을 3개의 case로 정의함-- 
    fn movePivotTo mode =
    (
        obj = selection as array
        
-- 선택한 오브젝트가 없을 경우 알림창 발생 --
        if obj.count == 0 then
            messageBox "Select Some Objects" title:"Warning"
        else
            for items in obj do
            (
                case mode of
                (
                    1: items.pivot = [items.center.x, items.center.y, items.center.z]
                    2: items.pivot = [items.center.x, items.center.y, items.min.z]
                    3: items.pivot = [items.center.x, items.center.y, items.max.z]
                )
            )
    )
    
-- 3개의 버튼을 누르면 각각 case가 실행되도록 정의함--
    on btn1 pressed do
        movePivotTo 1
    
    on btn2 pressed do
        movePivotTo 2
    
    on btn3 pressed do
        movePivotTo 3
)
-- 롤아웃을 생성함
createDialog junscript

 

 

 

 

4) 저장

- c드라이브에 나만의 스크립트 폴더를 만듬

- 이름.ms 확장자로 저장함

 


* 실제 사용될 Script는 작성 완료!

 

 

 

 

 

 

 

 

4. 매크로 스크립트 만들기

혼자서 사용할 때는 위처럼 만들어서 Customize메뉴에 UI세팅해서 사용해도 되는데, 

타인이나 다른 컴퓨터 등에 새롭게 설치하거나 좀 더 쉽게 사용하기 위해 매크로 스크립트로 만들어주도록 함.

 

 

1) 매크로 스크립트 코드 기본 양식

macroScript 스크립트 가칭
	category: "내 카테고리 명칭"
	tooltip: "이 스크립트의 명칭"
	buttonText: "롤아웃 버튼의 이름"
(
	on execute do fileIn "스크립트 파일 경로"
)

 

 

2) 적용 예시

macroScript maxscript1
	category: "Junscript"
	tooltip: "PivotChange"
	buttonText: "Pivot Change"
(
	on execute do fileIn "C:\maxScripts\Junscript\pivotchange.ms"
)

 

 

3) 저장

 

- 스크립트 에디터에서 작성한 후,

 

- 이름을 입력하고 위와 같은 폴더에 저장

 

 

*위와 같이 2개의 .ms파일이 있어야 합니다. 하나는 매크로스크립트 파일이며, 하나는 실제 사용하는 스크립트 파일입니다. 위에서 설명한 바와 같이 매크로스크립트를 실행하여 해당 경로에 있는 스크립트를 다시 실행하는 방식입니다.

이걸 하나의 파일로 할 수도 있습니다. 다음 편에 나옵니다.

 

 

 

 

 

 

 

 

 

 

5. UI 세팅 및 사용

1) 맥스를 끄고 다시 켭니다. (혹은 다른 컴퓨터에서 설치 시 맥스를 새로 켭니다) 

 

 

2) 맥스 화면위에 저장해놓은 "Junscript.ms"파일만 드래그앤드롭하여 놓습니다.

**여기에서 오류가 있다면 경로 설정에 문제가 있는 경우가 많습니다.

**자신이 만든 스크립트의 경로, 폴더와 파일명을 잘 확인하세요!!

**컴퓨터명칭이나 경로내 폴더이름, 파일이름에 한글이나 특수문자가 있으면 안됩니다.

 

 

 

 

 

이후는 일반적인 사용자 상단 커맨드 패널 Bar 설정 방식과 동일합니다.

 

 

 

 

3) 상단 메뉴에 Customize / User Interface 유저 인터페이스 메뉴 선택

 

 

 

 

4) Toolbars / Category 에서 "Junscript" 찾으면 일단 성공입니다

 

 

 


5) "Junscript"카테고리 안에 "PivotChange" 라는 툴팁이 있으면 또한 성공입니다.

- 오른쪽 New 버튼 눌러 새로운 툴바 하나 만든 후

- Name에 이름을 가칭을 입력하고 OK 



 

6) 가칭의 바가 생성되면, Action 툴팁을 선택하여 Drag and Drop 하여 적용합니다

 

 

 

7) 바를 선택해서 이동시켜 상단 커맨드 패널에 드래그 앤 드롭하여 옮겨놓습니다.

 

 

 

8) 바를 누르면 롤아웃 버튼창이 활성화되는 것을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

모든 오브젝트를 선택 후 한 번에 피봇 위치 이동이 잘 되면 성공입니다!!

 

 

 

 

 

 

 

 

BR.h

 

 

 

 

 

 

 

728x90
반응형