# Unity Editor Toolkit - Component Commands 완전한 Component 조작 및 관리 명령어 레퍼런스입니다. **Last Updated**: 2025-01-25 --- ## comp list GameObject의 모든 컴포넌트를 나열합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp list [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 (예: "Player" 또는 "Environment/Player") ``` **Options:** ``` --include-disabled 비활성 컴포넌트도 포함 (기본값: 활성 컴포넌트만 표시) --type-only 컴포넌트 타입만 표시 (세부 정보 제외) --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Output Icons:** ``` ● 활성 빌트인 컴포넌트 ○ 비활성 컴포넌트 ★ MonoBehaviour (커스텀 스크립트) ``` **Examples:** ```bash # GameObject의 모든 활성 컴포넌트 나열 cd && node .unity-websocket/uw comp list "Player" # 비활성 컴포넌트도 포함하여 나열 cd && node .unity-websocket/uw comp list "Enemy" --include-disabled # 타입만 표시 cd && node .unity-websocket/uw comp list "Character" --type-only # JSON 형식으로 출력 cd && node .unity-websocket/uw comp list "Player" --json ``` --- ## comp add GameObject에 컴포넌트를 추가합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp add [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 추가할 컴포넌트 타입 (예: Rigidbody, BoxCollider, AudioSource) ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Supported Component Types:** - Unity Built-in: Rigidbody, Rigidbody2D, BoxCollider, SphereCollider, CapsuleCollider, MeshCollider, AudioSource, AudioListener, Camera, Light, etc. - Physics: Rigidbody, Rigidbody2D, Joint, SpringJoint, HingeJoint, ConfigurableJoint, etc. - Rendering: MeshRenderer, SkinnedMeshRenderer, SpriteRenderer, LineRenderer, TrailRenderer, etc. - Audio: AudioSource, AudioListener, AudioReverbFilter, etc. - Custom: 모든 MonoBehaviour 스크립트 **Examples:** ```bash # Rigidbody 추가 cd && node .unity-websocket/uw comp add "Player" Rigidbody # BoxCollider 추가 cd && node .unity-websocket/uw comp add "Enemy" BoxCollider # 커스텀 스크립트 추가 cd && node .unity-websocket/uw comp add "Character" PlayerController # JSON 형식으로 응답 받기 cd && node .unity-websocket/uw comp add "Item" Collider --json ``` **Important:** - Transform 컴포넌트는 모든 GameObject에 자동으로 포함되므로 추가할 수 없습니다. - 같은 타입의 컴포넌트가 이미 존재하면 중복 추가되지 않습니다. --- ## comp remove GameObject에서 컴포넌트를 제거합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp remove [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 제거할 컴포넌트 타입 ``` **Options:** ``` --force 확인 없이 제거 --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # 컴포넌트 제거 cd && node .unity-websocket/uw comp remove "Player" AudioSource # Rigidbody 제거 cd && node .unity-websocket/uw comp remove "Enemy" Rigidbody # 확인 없이 제거 cd && node .unity-websocket/uw comp remove "Temp" BoxCollider --force ``` **Important:** - Transform은 필수 컴포넌트이므로 제거할 수 없습니다. - Ctrl+Z (Undo)로 되돌릴 수 있습니다. --- ## comp enable GameObject의 컴포넌트를 활성화합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp enable [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 활성화할 컴포넌트 타입 ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # AudioSource 활성화 cd && node .unity-websocket/uw comp enable "Player" AudioSource # 커스텀 스크립트 활성화 cd && node .unity-websocket/uw comp enable "Character" PlayerController # JSON 응답 cd && node .unity-websocket/uw comp enable "Enemy" AIController --json ``` **Important:** - Behaviour를 상속한 컴포넌트(MonoBehaviour, Renderer, AudioSource 등)만 활성화/비활성화 가능합니다. --- ## comp disable GameObject의 컴포넌트를 비활성화합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp disable [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 비활성화할 컴포넌트 타입 ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # AudioSource 비활성화 cd && node .unity-websocket/uw comp disable "Player" AudioSource # 커스텀 스크립트 비활성화 cd && node .unity-websocket/uw comp disable "Enemy" EnemyAI # 렌더러 비활성화 cd && node .unity-websocket/uw comp disable "Visual" MeshRenderer --json ``` **Important:** - Behaviour를 상속한 컴포넌트만 비활성화 가능합니다. - 게임 오브젝트가 비활성화되어 있으면 모든 컴포넌트가 자동으로 비활성 상태입니다. --- ## comp get 컴포넌트의 속성값을 조회합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp get [property] [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 컴포넌트 타입 [property] 특정 속성 이름 (생략하면 모든 속성 표시) ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # Rigidbody의 모든 속성 조회 cd && node .unity-websocket/uw comp get "Player" Rigidbody # 특정 속성 값 조회 cd && node .unity-websocket/uw comp get "Player" Rigidbody mass # Transform 위치 조회 cd && node .unity-websocket/uw comp get "Enemy" Transform localPosition # JSON 형식으로 출력 cd && node .unity-websocket/uw comp get "Character" Camera fieldOfView --json ``` **Supported Property Types:** - Primitive: int, float, bool, string - Unity Types: Vector2, Vector3, Vector4, Color, Rect, Bounds - Enum: 열거형 값 - Reference: 게임 오브젝트/에셋 참조 --- ## comp set 컴포넌트의 속성값을 설정합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp set [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 컴포넌트 타입 속성 이름 새 값 (쉼표로 구분된 벡터, 또는 일반 값) ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Value Formats:** ``` Integer/Float: 123 또는 45.67 Boolean: true 또는 false String: "Hello World" 또는 HelloWorld Vector3: "1,2,3" (공백 없이) Color: "1,0,0,1" (R,G,B,A) Enum: 열거형 이름 (예: "Linear") ObjectReference: "GameObjectName" 또는 "GameObject:Component" 또는 "Assets/path/to/asset.ext" ``` **ObjectReference Formats (컴포넌트/에셋 참조):** | 형식 | 예시 | 설명 | |------|------|------| | `null` | `"null"` | 참조 해제 | | `GameObject` | `"Player"` | GameObject 참조 | | `GameObject:Component` | `"GameHUD:UnityEngine.UIElements.UIDocument"` | 컴포넌트 참조 | | `Asset Path` | `"Assets/Materials/Red.mat"` | 에셋 참조 | **⚠️ 중요: 컴포넌트 참조 시 전체 네임스페이스 필요** ``` ✅ "GameHUD:UnityEngine.UIElements.UIDocument" (전체 네임스페이스) ❌ "GameHUD:UIDocument" (작동 안함) ``` **Examples:** ```bash # Rigidbody mass 설정 cd && node .unity-websocket/uw comp set "Player" Rigidbody mass 2.5 # 중력 비활성화 cd && node .unity-websocket/uw comp set "Floating" Rigidbody useGravity false # 위치 설정 cd && node .unity-websocket/uw comp set "Enemy" Transform localPosition "5,10,0" # Camera FOV 설정 cd && node .unity-websocket/uw comp set "MainCamera" Camera fieldOfView 75 # 색상 설정 (R,G,B,A) cd && node .unity-websocket/uw comp set "Material" SpriteRenderer color "1,0,0,1" # Enum 값 설정 cd && node .unity-websocket/uw comp set "Collider" Rigidbody constraints "FreezeRotationZ" # ObjectReference 설정 - GameObject 참조 cd && node .unity-websocket/uw comp set "Enemy" AIController target "Player" # ObjectReference 설정 - 컴포넌트 참조 (전체 네임스페이스 필수) cd && node .unity-websocket/uw comp set "HUD" GameView uiDocument "GameHUD:UnityEngine.UIElements.UIDocument" # ObjectReference 설정 - 에셋 참조 cd && node .unity-websocket/uw comp set "Enemy" SpriteRenderer sprite "Assets/Sprites/Enemy.png" # ObjectReference 설정 - 참조 해제 cd && node .unity-websocket/uw comp set "Item" Pickup targetObject "null" ``` **Important:** - Ctrl+Z (Undo)로 되돌릴 수 있습니다. - 변경 전 기존 값을 응답에 포함합니다. --- ## comp inspect 컴포넌트의 모든 속성과 상태를 표시합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp inspect [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 컴포넌트 타입 ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # Rigidbody 전체 검사 cd && node .unity-websocket/uw comp inspect "Player" Rigidbody # Transform 검사 cd && node .unity-websocket/uw comp inspect "Enemy" Transform # 커스텀 스크립트 검사 cd && node .unity-websocket/uw comp inspect "Character" PlayerController # JSON으로 출력 및 파일 저장 cd && node .unity-websocket/uw comp inspect "Item" Collider --json > component.json ``` **Output Format:** ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ComponentName ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ● Type: Full.Type.Name ● Enabled: true propertyName1 : PropertyType = value1 propertyName2 : PropertyType = value2 ... ``` --- ## comp move-up 컴포넌트를 컴포넌트 목록에서 위로 이동합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp move-up [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 이동할 컴포넌트 타입 ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # Rigidbody를 위로 이동 cd && node .unity-websocket/uw comp move-up "Player" Rigidbody # BoxCollider를 위로 이동 cd && node .unity-websocket/uw comp move-up "Enemy" BoxCollider # 먼저 목록 확인 cd && node .unity-websocket/uw comp list "Character" # 그 다음 이동 cd && node .unity-websocket/uw comp move-up "Character" CustomScript ``` **Important:** - Transform은 항상 첫 번째 위치에 고정되므로 이동할 수 없습니다. - Inspector의 표시 순서가 변경됩니다. - 일부 컴포넌트는 실행 순서에 영향을 받을 수 있습니다. --- ## comp move-down 컴포넌트를 컴포넌트 목록에서 아래로 이동합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp move-down [options] ``` **Arguments:** ``` GameObject 이름 또는 경로 이동할 컴포넌트 타입 ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # Rigidbody를 아래로 이동 cd && node .unity-websocket/uw comp move-down "Player" Rigidbody # 컴포넌트 순서 재정렬 cd && node .unity-websocket/uw comp move-down "Character" AudioSource cd && node .unity-websocket/uw comp move-down "Character" AudioSource # 최종 결과 확인 cd && node .unity-websocket/uw comp list "Character" ``` **Important:** - 이미 마지막 위치에 있으면 이동할 수 없습니다. - Transform은 항상 첫 번째 위치입니다. --- ## comp copy 한 GameObject의 컴포넌트를 다른 GameObject로 복사합니다. **Usage:** ```bash cd && node .unity-websocket/uw comp copy [options] ``` **Arguments:** ``` 원본 GameObject 이름 또는 경로 복사할 컴포넌트 타입 대상 GameObject 이름 또는 경로 ``` **Options:** ``` --json JSON 형식으로 출력 --timeout WebSocket 연결 타임아웃 (기본값: 30000) -h, --help 명령어 도움말 표시 ``` **Examples:** ```bash # Rigidbody 복사 cd && node .unity-websocket/uw comp copy "Player" Rigidbody "Enemy" # 여러 컴포넌트 복사 cd && node .unity-websocket/uw comp copy "Template" BoxCollider "New" cd && node .unity-websocket/uw comp copy "Template" Rigidbody "New" cd && node .unity-websocket/uw comp copy "Template" AudioSource "New" # 스크립트 복사 cd && node .unity-websocket/uw comp copy "Character" PlayerController "Character2" # 결과 확인 cd && node .unity-websocket/uw comp list "New" ``` **Important:** - 원본 컴포넌트의 모든 속성이 복사됩니다. - 대상 GameObject에 같은 타입의 컴포넌트가 있으면 덮어쓰지 않고 새로 추가합니다. - Ctrl+Z (Undo)로 되돌릴 수 있습니다. --- ## Tips & Best Practices ### 컴포넌트 순서 최적화 ```bash # 1. 목록으로 현재 순서 확인 cd && node .unity-websocket/uw comp list "Player" # 2. 필요한 순서대로 정렬 cd && node .unity-websocket/uw comp move-up "Player" Rigidbody cd && node .unity-websocket/uw comp move-up "Player" BoxCollider # 3. 최종 확인 cd && node .unity-websocket/uw comp list "Player" ``` ### GameObject 템플릿 만들기 ```bash # 1. 하나의 GameObject에 모든 컴포넌트 추가 및 설정 cd && node .unity-websocket/uw comp add "Template" Rigidbody cd && node .unity-websocket/uw comp add "Template" BoxCollider cd && node .unity-websocket/uw comp add "Template" AudioSource cd && node .unity-websocket/uw comp set "Template" Rigidbody mass 2.0 # 2. 다른 GameObject들에 복사 cd && node .unity-websocket/uw comp copy "Template" Rigidbody "Object1" cd && node .unity-websocket/uw comp copy "Template" BoxCollider "Object1" cd && node .unity-websocket/uw comp copy "Template" AudioSource "Object1" ``` ### 대량 설정 변경 ```bash # 여러 컴포넌트의 속성을 한 번에 변경 (스크립트) for obj in "Enemy1" "Enemy2" "Enemy3"; do cd && node .unity-websocket/uw comp set "$obj" Rigidbody mass 1.5 cd && node .unity-websocket/uw comp set "$obj" AudioSource volume 0.8 done ``` --- ## Troubleshooting ### 컴포넌트 타입을 찾을 수 없음 **문제**: `Component type not found` **해결**: - 컴포넌트 이름이 정확한지 확인 (대소문자 구분) - 예: `Rigidbody` (O), `rigidbody` (X), `RigidBody` (X) - 네임스페이스가 필요한 경우: `UnityEngine.Rigidbody` ### 속성을 변경할 수 없음 **문제**: `Failed to set property` **해결**: - 속성 이름이 정확한지 확인 - Inspector에 표시되지 않는 내부 속성(`m_`로 시작)은 변경 불가 - 값의 형식이 맞는지 확인 (예: Vector3는 "x,y,z" 형식) ### 컴포넌트 제거 불가 **문제**: `Cannot remove component` **해결**: - Transform은 필수 컴포넌트이므로 제거 불가 - 일부 컴포넌트는 RequireComponent로 인해 제거 불가능할 수 있음 ### ObjectReference를 찾을 수 없음 **문제**: `ObjectReference not found: 'GameHUD:UIDocument'` **해결**: - **컴포넌트 참조 시 전체 네임스페이스 필수** - ✅ `"GameHUD:UnityEngine.UIElements.UIDocument"` - ❌ `"GameHUD:UIDocument"` - 일반적인 Unity 네임스페이스: - `UnityEngine.` - 기본 컴포넌트 (Rigidbody, Collider 등) - `UnityEngine.UI.` - uGUI 컴포넌트 (Image, Text 등) - `UnityEngine.UIElements.` - UI Toolkit 컴포넌트 (UIDocument 등) - GameObject 이름이 정확한지 확인 - 비활성 GameObject는 GameObject.Find로 찾을 수 없음 --- ## Related Commands - [GameObject & Hierarchy Commands](./COMMANDS_GAMEOBJECT_HIERARCHY.md) - GameObject 생성, 계층 구조 관리 - [Transform Commands](./COMMANDS_TRANSFORM.md) - 위치, 회전, 크기 조작 - [Scene Commands](./COMMANDS_SCENE.md) - 씬 관리 - [Asset Commands](./COMMANDS_ASSET.md) - 에셋 및 ScriptableObject 관리