3D Max

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

From.h 2025. 5. 15. 00:43
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
반응형