기타 유틸리티
메뉴 하나로 완결되는 소소한 기능들을 모아 놓았습니다.
Assets / Copy GUID
Project에서 에셋을 우클릭 → Copy GUID로 해당 에셋의 GUID를 클립보드에 복사합니다.
Assets / Copy Assets With Dependency
Project에서 복제하려는 에셋들을 한꺼번에 선택하고 우클릭 → Copy Assets With Dependency. 선택한 에셋을 새 GUID로 통째로 복제하고, 복제본끼리의 참조를 다시 연결합니다. "배포 모델의 머티리얼을 수정한 변형 버전을 원본을 덮어쓰지 않고 만들고 싶을 때" 같은 상황에 유용합니다.
- 의존 관계를 자동으로 수집하지는 않습니다 — 함께 복제하려는 의존 에셋 (머티리얼·텍스처 등)도 포함해서 선택하세요
- 선택에 포함하지 않은 에셋에 대한 참조는 원본 에셋을 가리킨 채 유지됩니다
- 폴더를 선택하면
폴더명 copy/에 구조째로 복제됩니다 - .meta는 임포트 설정을 유지한 채 GUID만 교체하여 복사됩니다
크레딧
Narazaka 님의 CopyAssetsWithDependency (Zlib License, 원작: k7a 님의 Qiita 글)를 수정하여 이식한 것입니다.
컴포넌트 전체 프로퍼티 복사
컴포넌트의 ⋮ 메뉴 (또는 우클릭)에 2개의 항목이 추가됩니다:
- Copy Component All — 전체 프로퍼티를 복사
- Paste Component All As New — 별도의 컴포넌트로 붙여넣기 (원본과는 독립된 인스턴스)
Unity 표준의 Copy Component / Paste Component As New와 달리, 참조까지 포함해서 한꺼번에 복제하고 싶을 때 사용합니다.
StateMachineBehaviour 복사 & 이름 변경
Animator의 State에 붙은 StateMachineBehaviour의 ⋮ 메뉴에 추가됩니다:
- Copy Behaviour / Paste Behaviour As New — 별도 인스턴스로 복제
- Rename — Behaviour 서브 에셋의 이름 변경
Humanoid 포즈 리셋
Animator 컴포넌트의 ⋮ 메뉴 (또는 우클릭)에 Reset Humanoid Pose가 추가됩니다. 포즈를 잡느라 움직인 본을 모델의 임포트 시 포즈 (T 포즈 등)로 한꺼번에 되돌립니다.
- 매핑된 모든 Humanoid 본이 대상입니다 (손가락·눈·턱까지). 스케일은 건드리지 않습니다
- 레퍼런스 포즈는 Avatar 에셋 자체의 스켈레톤 정보에서 가져오므로, Avatar가 FBX 바깥에 있는 (복사된 .asset 등) 모델에서도 동작합니다
- Humanoid가 아니거나 Avatar가 설정되지 않은 경우에는 다이얼로그로 알리고 아무것도 하지 않습니다. Undo 1회로 되돌릴 수 있습니다
크레딧
gatosyocora 님의 VRCDeveloperTool (zlib License)의 HumanoidPoseResetter를 원안으로 하여, 레퍼런스 포즈를 가져오는 방식을 바꿔 구현한 것입니다.
EditorOnly 태그 단축키 전환
GameObject/Toggle EditorOnly Tag (Alt+Shift+S) — 자세한 내용은 Hierarchy 확장을 참조하세요.
Sort SerializedUdonPrograms Worlds SDK
상단 메뉴의 さたにあしょっぴんぐ/エディタカスタマイザー/Misc/Sort SerializedUdonPrograms (사타니아 쇼핑 / 에디터 커스터마이저 / Misc / Sort SerializedUdonPrograms) — 월드 제작용입니다. SerializedUdonPrograms 아래에 흩어져 있는 에셋을 대응하는 Udon 프로그램의 폴더로 분류하여 정리합니다.
Package Manager 즐겨찾기 (Favorites)
자주 쓰는 패키지를 위해 매번 탭을 옮겨 가며 검색할 필요가 없어집니다.
- 패키지를 선택하면 상세 패널의 Install 버튼 옆에 ★ 버튼이 붙습니다. 클릭하면 즐겨찾기에 등록 / 해제됩니다 (등록된 것은 금색)
- 스코프 전환 드롭다운에 ★ Favorites 탭이 추가되어, 등록한 패키지 / 에셋을 한눈에 볼 수 있습니다
- 패널 오른쪽 위의 「+」 버튼으로 Package Manager에 나오지 않는 것도 등록할 수 있습니다 (파일 / 폴더는 패널에 드래그 & 드롭해도 추가됩니다):
- .unitypackage 파일
- UPM / VPM 형식 폴더 (package.json이 들어 있는 폴더. 표시 이름과 버전은 package.json에서 읽습니다)
- git URL (
https://….git?path=…#ref형식. 표시 이름은 URL에서 추측되며, 첫 Install 후 실제 패키지 이름으로 갱신됩니다)
- 목록의 행에서 직접 조작할 수 있습니다:
- Install (UPM / git URL / UPM 폴더) — Package Manager를 거치지 않고 프로젝트에 추가. git URL은 URL에서, UPM 폴더는
file:의존성으로 추가합니다 (이미 들어 있으면 「導入済み」(설치됨) 표시)- git URL Install이 git의 소유자 검사에 거부된 경우 (exFAT / FAT32처럼 소유자를 기록하지 않는 드라이브의 프로젝트에서
fatal: not in a git directory/dubious ownership이 됨. Package Manager 표준 Add package from git URL도 동일) 원인과 회피 명령git config --global --add safe.directory "<드라이브>:/*"를 대화 상자로 안내합니다 (「コマンドをコピー」로 클립보드에 복사)
- git URL Install이 git의 소유자 검사에 거부된 경우 (exFAT / FAT32처럼 소유자를 기록하지 않는 드라이브의 프로젝트에서
- Import (My Assets / .unitypackage) — 다운로드된, 또는 파일의 .unitypackage를 직접 임포트 (아직 다운로드하지 않았다면 안내를 표시)
- 開く (열기) — Package Manager에서 해당 패키지를 표시. .unitypackage 파일과 설치되지 않은 UPM 폴더는 탐색기에서 위치를 엽니다
- 경로를 찾을 수 없는 (이동·삭제된) 등록은 빨간 글자로 표시되고 Install / Import를 누를 수 없게 됩니다 (삭제는 가능)
- Install (UPM / git URL / UPM 폴더) — Package Manager를 거치지 않고 프로젝트에 추가. git URL은 URL에서, UPM 폴더는
- 이미 프로젝트에 들어 있는 git / 로컬 (
file:) 유래의 패키지를 ★로 등록하면 URL / 폴더도 함께 기록되므로, 다른 프로젝트에서도 그대로 Install할 수 있습니다
Unity 2022.3 전용
Unity 6000.0 이후에는 Package Manager의 내부 구조가 새롭게 바뀌었기 때문에 이 기능은 비활성화됩니다 (지원 예정).
GameView 스크린샷 / 녹화
GameView 확장 페이지로 이동했습니다.
SceneView MSAA / 선택 아웃라인
SceneView 확장 페이지로 이동했습니다.
창 탭 우클릭 메뉴 확장
Editor Setting의 DockArea 항목에서 토글합니다. 개발자용으로, 탭 우클릭 메뉴에 「WindowのTypeを出力」(Window의 Type 출력) 항목 (해당 창의 클래스 이름을 로그로 출력)을 추가할 수 있습니다 (기본 OFF, 표시 여부는 Editor Setting에서 설정).
VPM Resolver의 하얀 제목 없는 창 대응
VRChat의 VPM Resolver (com.vrchat.core.vpm-resolver)는 시작 시 [InitializeOnLoad]에서 패키지 해결 여부를 확인하고, 미해결이 있으면 확인 대화상자 → 「Show Me What's Missing」으로 Package Resolver 창을 엽니다. Unity 2022.3의 에셋 임포트 워커 (별도 프로세스의 Unity.exe -batchMode)에서도 같은 코드가 실행되는데, 거기서는 대화상자가 자동 취소되어 창 생성으로 진행되기 때문에 작업 표시줄에만 나타나는 하얗고 제목 없는 Unity 창 (개수 = 시작된 워커 수)이 남습니다 (Resolver 0.1.29 기준 미수정).
SCE는 이를 우회합니다. UI가 없는 프로세스 (임포트 워커 / 배치 모드)에서만 동작하며 일반 에디터에서는 아무것도 하지 않습니다. ON/OFF는 Editor Setting의 BugFix 항목 (기본 ON)에서 전환합니다.
- Resolver보다 먼저 초기화된 경우, 그 프로세스에서의 시작 확인 자체를 건너뛰게 합니다
- 이미 창이 만들어진 경우, 모든 초기화가 끝난 시점에 닫습니다 (
Logs/AssetImportWorker*.log에 「VPM Resolver がヘッドレスプロセス … に作ったウィンドウを閉じました」(헤드리스 프로세스에 만든 창을 닫음) 줄이 표시됩니다) - 만약을 위해 그 프로세스에서는 Package Resolver 창을 여는 처리도 비활성화합니다
TIP
근본적으로는 프로젝트의 Packages/vpm-manifest.json에 해결할 수 없는 항목이 남아 있는 상태 (시작할 때마다 Resolver 대화상자가 나오는 상태)를 고치면 발생하지 않습니다.
Harmony가 동작하지 않는 환경 (Apple Silicon Mac)
Apple Silicon Mac에서는 VRChat SDK에 포함된 Harmony (0Harmony 2.0.5)가 macOS의 메모리 보호 (W^X)에 대응하지 않아, SCE / Modular Avatar / NDMF의 Harmony 패치가 모두 mprotect returned EACCES로 실패합니다 (SCE의 Harmony 의존 기능은 동작하지 않습니다).
SCE는 이 실패를 첫 번째 패치에서 감지하여 패치마다의 예외 대신 경고 1회로 정리합니다 (모든 초기화가 끝난 뒤 1회만 재시도하므로, 아래 패키지가 설치되어 있으면 초기화 순서와 관계없이 적용됩니다). 그래도 적용되지 않으면 macOS에서는 anatawa12 님의 Harmony Patches for Apple Silicon (native & Rosetta) (com.anatawa12.apple-silicon-harmony)를 설치할지 묻는 대화 상자를 표시합니다. 「インストールする」(설치)를 누르면 VPM 저장소 (https://vpm.anatawa12.com/vpm.json)에서 받아 프로젝트에 추가하고 ALCOM / VCC에도 저장소를 등록합니다 (VPM Resolver가 없는 프로젝트에서는 저장소 등록 페이지를 엽니다). 「今後表示しない」(다시 표시하지 않음)는 Editor Setting의 BugFix 항목에서 되돌릴 수 있고, 같은 곳에 설치 버튼도 있습니다.
Light Probe Generator (월드용)
상단 메뉴의 さたにあしょっぴんぐ/エディタカスタマイザー/Misc/Light Probe Generator에서 엽니다. 지정한 Box 범위에 LightProbe를 격자 형태로 자동 배치하는 도구입니다.
- 配置領域 (배치 영역)은 창이 열려 있는 동안 SceneView에 녹색 프레임으로 표시되며, 모서리/면 드래그와 중심 핸들로 직접 편집할 수 있습니다. 「選択オブジェクトから範囲を取得」(선택 오브젝트에서 범위 가져오기)으로 월드의 지형 등에서 한 번에 설정할 수도 있습니다
- 配置間隔 (m) (배치 간격 (m))으로 격자의 촘촘함을 지정합니다. 격자는 영역 안에 중앙 정렬로 깔립니다
- 配置禁止領域 (배치 금지 영역)을 여러 개 추가할 수 있습니다 (SceneView에 빨간 프레임으로 표시·편집 가능). 금지 영역 안의 격자점은 건너뜁니다
- 생성 대상은 씬 위의 LightProbeGroup입니다. 같은 이름의 그룹이 있으면 새로 만들지 않고 덮어써서 업데이트하므로, 범위를 조정하면서 몇 번이든 다시 생성할 수 있습니다. 프로브가 적을 때는 배치 위치를 나타내는 노란 프리뷰 점도 표시됩니다