Supports creating, editing, and managing Unity assets (prefabs, materials, asset database, Addressables). Includes dependency analysis and import settings. Use when: prefab creation, material editing, asset search, dependency analysis, Addressables
/plugin marketplace add akiojin/unity-mcp-server/plugin install unity-mcp-server@unity-mcp-serverThis skill is limited to using the following tools:
A guide for managing prefabs, materials, asset database, and Addressables.
// Create prefab from GameObject
mcp__unity-mcp-server__create_prefab({
prefabPath: "Assets/Prefabs/Enemy.prefab",
gameObjectPath: "/Enemy"
})
// Instantiate prefab in scene
mcp__unity-mcp-server__instantiate_prefab({
prefabPath: "Assets/Prefabs/Enemy.prefab",
position: { x: 5, y: 0, z: 0 },
name: "Enemy_01"
})
// Create basic material
mcp__unity-mcp-server__create_material({
materialPath: "Assets/Materials/RedMetal.mat",
shader: "Standard",
properties: {
"_Color": [1, 0, 0, 1],
"_Metallic": 0.8,
"_Glossiness": 0.6
}
})
// Search for textures
mcp__unity-mcp-server__manage_asset_database({
action: "find_assets",
filter: "t:Texture2D"
})
// Create prefab from scene GameObject
mcp__unity-mcp-server__create_prefab({
prefabPath: "Assets/Prefabs/Player.prefab",
gameObjectPath: "/Player"
})
// Create empty prefab
mcp__unity-mcp-server__create_prefab({
prefabPath: "Assets/Prefabs/Empty.prefab",
createFromTemplate: true
})
// Allow overwrite
mcp__unity-mcp-server__create_prefab({
prefabPath: "Assets/Prefabs/Player.prefab",
gameObjectPath: "/Player",
overwrite: true
})
// Open prefab
mcp__unity-mcp-server__open_prefab({
prefabPath: "Assets/Prefabs/Player.prefab"
})
// Focus on specific object
mcp__unity-mcp-server__open_prefab({
prefabPath: "Assets/Prefabs/Player.prefab",
focusObject: "Weapon", // Relative path from prefab root
isolateObject: true
})
// Edit in prefab mode (component operations, etc.)
mcp__unity-mcp-server__add_component({
gameObjectPath: "/Player", // In prefab mode, prefab root is the root
componentType: "AudioSource"
})
// Save and exit prefab mode
mcp__unity-mcp-server__save_prefab()
mcp__unity-mcp-server__exit_prefab_mode({ saveChanges: true })
// Exit without saving
mcp__unity-mcp-server__exit_prefab_mode({ saveChanges: false })
// Basic instantiation
mcp__unity-mcp-server__instantiate_prefab({
prefabPath: "Assets/Prefabs/Enemy.prefab"
})
// With Transform
mcp__unity-mcp-server__instantiate_prefab({
prefabPath: "Assets/Prefabs/Enemy.prefab",
position: { x: 10, y: 0, z: 5 },
rotation: { x: 0, y: 90, z: 0 },
name: "Enemy_Guard"
})
// With parent object
mcp__unity-mcp-server__instantiate_prefab({
prefabPath: "Assets/Prefabs/Coin.prefab",
parent: "/Collectibles",
position: { x: 0, y: 1, z: 0 }
})
// Change properties (also apply to instances)
mcp__unity-mcp-server__modify_prefab({
prefabPath: "Assets/Prefabs/Enemy.prefab",
modifications: {
"health": 150,
"speed": 3.5
},
applyToInstances: true
})
// Do not apply to instances
mcp__unity-mcp-server__modify_prefab({
prefabPath: "Assets/Prefabs/Enemy.prefab",
modifications: { "debugMode": true },
applyToInstances: false
})
// Standard shader
mcp__unity-mcp-server__create_material({
materialPath: "Assets/Materials/Metal.mat",
shader: "Standard",
properties: {
"_Color": [0.8, 0.8, 0.8, 1],
"_Metallic": 1.0,
"_Glossiness": 0.9
}
})
// Unlit shader
mcp__unity-mcp-server__create_material({
materialPath: "Assets/Materials/Unlit.mat",
shader: "Unlit/Color",
properties: {
"_Color": [1, 0, 0, 1]
}
})
// URP shader
mcp__unity-mcp-server__create_material({
materialPath: "Assets/Materials/URPLit.mat",
shader: "Universal Render Pipeline/Lit",
properties: {
"_BaseColor": [1, 1, 1, 1],
"_Smoothness": 0.5
}
})
// Copy existing material
mcp__unity-mcp-server__create_material({
materialPath: "Assets/Materials/MetalRed.mat",
copyFrom: "Assets/Materials/Metal.mat",
properties: {
"_Color": [1, 0, 0, 1]
}
})
// Change properties
mcp__unity-mcp-server__modify_material({
materialPath: "Assets/Materials/Metal.mat",
properties: {
"_Color": [0, 0, 1, 1],
"_Metallic": 0.5
}
})
// Change shader
mcp__unity-mcp-server__modify_material({
materialPath: "Assets/Materials/Debug.mat",
shader: "Unlit/Color",
properties: {
"_Color": [1, 0, 1, 1]
}
})
| Shader | Property | Description |
|---|---|---|
| Standard | _Color | Albedo color [R,G,B,A] |
| Standard | _Metallic | Metallic value 0-1 |
| Standard | _Glossiness | Smoothness 0-1 |
| Standard | _MainTex | Albedo texture |
| Standard | _BumpMap | Normal map |
| Standard | _EmissionColor | Emission color |
| URP/Lit | _BaseColor | Base color |
| URP/Lit | _Smoothness | Smoothness |
| URP/Lit | _BaseMap | Base texture |
// Type filter
mcp__unity-mcp-server__manage_asset_database({
action: "find_assets",
filter: "t:Texture2D"
})
// Name filter
mcp__unity-mcp-server__manage_asset_database({
action: "find_assets",
filter: "Player"
})
// Label filter
mcp__unity-mcp-server__manage_asset_database({
action: "find_assets",
filter: "l:UI"
})
// Combined filter
mcp__unity-mcp-server__manage_asset_database({
action: "find_assets",
filter: "t:Material Player"
})
// Folder specification
mcp__unity-mcp-server__manage_asset_database({
action: "find_assets",
filter: "t:Prefab",
searchInFolders: ["Assets/Prefabs", "Assets/Characters"]
})
| Filter | Description | Example |
|---|---|---|
t:Type | Search by type | t:Texture2D, t:Material, t:Prefab |
l:Label | Search by label | l:UI, l:Environment |
name | Search by name | Player, Enemy* |
| Combined | AND with space | t:Material Red |
mcp__unity-mcp-server__manage_asset_database({
action: "get_asset_info",
assetPath: "Assets/Textures/Player.png"
})
// Returns: type, size, dependencies, labels, etc.
// Create folder
mcp__unity-mcp-server__manage_asset_database({
action: "create_folder",
folderPath: "Assets/NewFeature/Prefabs"
})
// Move
mcp__unity-mcp-server__manage_asset_database({
action: "move_asset",
fromPath: "Assets/Old/Player.prefab",
toPath: "Assets/New/Player.prefab"
})
// Copy
mcp__unity-mcp-server__manage_asset_database({
action: "copy_asset",
fromPath: "Assets/Templates/Enemy.prefab",
toPath: "Assets/Enemies/Enemy_01.prefab"
})
// Delete
mcp__unity-mcp-server__manage_asset_database({
action: "delete_asset",
assetPath: "Assets/Unused/OldPrefab.prefab"
})
// Refresh asset database
mcp__unity-mcp-server__manage_asset_database({
action: "refresh"
})
// Save all assets
mcp__unity-mcp-server__manage_asset_database({
action: "save"
})
// Get asset dependencies
mcp__unity-mcp-server__analyze_asset_dependencies({
action: "get_dependencies",
assetPath: "Assets/Prefabs/Player.prefab",
recursive: true // Include indirect dependencies
})
// Find assets that reference this asset
mcp__unity-mcp-server__analyze_asset_dependencies({
action: "get_dependents",
assetPath: "Assets/Materials/PlayerMat.mat"
})
mcp__unity-mcp-server__analyze_asset_dependencies({
action: "analyze_circular"
})
mcp__unity-mcp-server__analyze_asset_dependencies({
action: "find_unused",
includeBuiltIn: false
})
// Total size of asset and its dependencies
mcp__unity-mcp-server__analyze_asset_dependencies({
action: "analyze_size_impact",
assetPath: "Assets/Prefabs/Boss.prefab"
})
// Detect broken references
mcp__unity-mcp-server__analyze_asset_dependencies({
action: "validate_references"
})
// Add entry
mcp__unity-mcp-server__addressables_manage({
action: "add_entry",
assetPath: "Assets/Prefabs/Enemy.prefab",
groupName: "Enemies",
address: "enemy_basic",
labels: ["combat", "spawn"]
})
// Remove entry
mcp__unity-mcp-server__addressables_manage({
action: "remove_entry",
assetPath: "Assets/Prefabs/OldEnemy.prefab"
})
// Change address
mcp__unity-mcp-server__addressables_manage({
action: "set_address",
assetPath: "Assets/Prefabs/Enemy.prefab",
newAddress: "enemy_soldier"
})
// Add label
mcp__unity-mcp-server__addressables_manage({
action: "add_label",
assetPath: "Assets/Prefabs/Enemy.prefab",
label: "boss"
})
// Remove label
mcp__unity-mcp-server__addressables_manage({
action: "remove_label",
assetPath: "Assets/Prefabs/Enemy.prefab",
label: "combat"
})
// Move entry to different group
mcp__unity-mcp-server__addressables_manage({
action: "move_entry",
assetPath: "Assets/Prefabs/Enemy.prefab",
targetGroupName: "BossEnemies"
})
// List groups
mcp__unity-mcp-server__addressables_manage({
action: "list_groups"
})
// List entries in group
mcp__unity-mcp-server__addressables_manage({
action: "list_entries",
groupName: "Enemies",
pageSize: 50,
offset: 0
})
// Create group
mcp__unity-mcp-server__addressables_manage({
action: "create_group",
groupName: "DLC_01"
})
// Remove group
mcp__unity-mcp-server__addressables_manage({
action: "remove_group",
groupName: "OldGroup"
})
// Build
mcp__unity-mcp-server__addressables_build({
action: "build",
buildTarget: "StandaloneWindows64"
})
// Clean build (delete cache then build)
mcp__unity-mcp-server__addressables_build({
action: "clean_build"
})
// Detect duplicate assets
mcp__unity-mcp-server__addressables_analyze({
action: "analyze_duplicates",
pageSize: 20
})
// Analyze dependencies
mcp__unity-mcp-server__addressables_analyze({
action: "analyze_dependencies",
assetPath: "Assets/Prefabs/Player.prefab"
})
// Detect unused assets
mcp__unity-mcp-server__addressables_analyze({
action: "analyze_unused",
pageSize: 50
})
mcp__unity-mcp-server__manage_asset_import_settings({
action: "get",
assetPath: "Assets/Textures/Player.png"
})
mcp__unity-mcp-server__manage_asset_import_settings({
action: "modify",
assetPath: "Assets/Textures/Player.png",
settings: {
maxTextureSize: 1024,
textureCompression: "Compressed",
filterMode: "Bilinear",
generateMipMaps: true,
sRGBTexture: true
}
})
mcp__unity-mcp-server__manage_asset_import_settings({
action: "modify",
assetPath: "Assets/Audio/BGM.mp3",
settings: {
loadType: "Streaming",
compressionFormat: "Vorbis",
quality: 0.7,
sampleRateSetting: "PreserveSampleRate"
}
})
// Apply saved preset
mcp__unity-mcp-server__manage_asset_import_settings({
action: "apply_preset",
assetPath: "Assets/Textures/UI_Icon.png",
preset: "UISprite"
})
mcp__unity-mcp-server__manage_asset_import_settings({
action: "reimport",
assetPath: "Assets/Textures/Player.png"
})
// 1. Build GameObject in scene
mcp__unity-mcp-server__create_gameobject({
name: "NewEnemy",
primitiveType: "capsule"
})
mcp__unity-mcp-server__add_component({
gameObjectPath: "/NewEnemy",
componentType: "Rigidbody"
})
// 2. Convert to prefab
mcp__unity-mcp-server__create_prefab({
prefabPath: "Assets/Prefabs/Enemies/NewEnemy.prefab",
gameObjectPath: "/NewEnemy"
})
// 3. Delete original in scene
mcp__unity-mcp-server__delete_gameobject({
path: "/NewEnemy"
})
// 4. Instantiate from prefab
mcp__unity-mcp-server__instantiate_prefab({
prefabPath: "Assets/Prefabs/Enemies/NewEnemy.prefab",
position: { x: 0, y: 0, z: 0 }
})
// Create base material
mcp__unity-mcp-server__create_material({
materialPath: "Assets/Materials/Enemy_Base.mat",
shader: "Standard",
properties: {
"_Metallic": 0.2,
"_Glossiness": 0.5
}
})
// Create variations
const colors = [
{ name: "Red", color: [1, 0, 0, 1] },
{ name: "Blue", color: [0, 0, 1, 1] },
{ name: "Green", color: [0, 1, 0, 1] }
]
for (const variant of colors) {
mcp__unity-mcp-server__create_material({
materialPath: `Assets/Materials/Enemy_${variant.name}.mat`,
copyFrom: "Assets/Materials/Enemy_Base.mat",
properties: { "_Color": variant.color }
})
}
// 1. Create group
mcp__unity-mcp-server__addressables_manage({
action: "create_group",
groupName: "Characters"
})
// 2. Add assets
mcp__unity-mcp-server__addressables_manage({
action: "add_entry",
assetPath: "Assets/Prefabs/Player.prefab",
groupName: "Characters",
address: "player",
labels: ["player", "controllable"]
})
mcp__unity-mcp-server__addressables_manage({
action: "add_entry",
assetPath: "Assets/Prefabs/NPC.prefab",
groupName: "Characters",
address: "npc_villager",
labels: ["npc", "friendly"]
})
// 3. Build
mcp__unity-mcp-server__addressables_build({
action: "build"
})
// 4. Analyze
mcp__unity-mcp-server__addressables_analyze({
action: "analyze_duplicates"
})
// ❌ No extension
prefabPath: "Assets/Prefabs/Player"
// ✅ .prefab extension required
prefabPath: "Assets/Prefabs/Player.prefab"
// ❌ Not starting with Assets
prefabPath: "Prefabs/Player.prefab"
// ✅ Start with Assets/
prefabPath: "Assets/Prefabs/Player.prefab"
// ❌ No extension
materialPath: "Assets/Materials/Red"
// ✅ .mat extension required
materialPath: "Assets/Materials/Red.mat"
// ✅ Always exit prefab mode
mcp__unity-mcp-server__open_prefab({ prefabPath: "..." })
// ... edit ...
mcp__unity-mcp-server__exit_prefab_mode({ saveChanges: true })
// After modifying files externally
// ✅ Refresh to reflect changes
mcp__unity-mcp-server__manage_asset_database({
action: "refresh"
})
// ❌ Adding entry to non-existent group
mcp__unity-mcp-server__addressables_manage({
action: "add_entry",
groupName: "NonExistent", // Error
...
})
// ✅ Create group first
mcp__unity-mcp-server__addressables_manage({
action: "create_group",
groupName: "NewGroup"
})
mcp__unity-mcp-server__addressables_manage({
action: "add_entry",
groupName: "NewGroup",
...
})
| Tool | Purpose |
|---|---|
create_prefab | Create prefab |
open_prefab | Start prefab mode |
exit_prefab_mode | End prefab mode |
save_prefab | Save prefab |
instantiate_prefab | Instantiate prefab |
modify_prefab | Modify prefab |
create_material | Create material |
modify_material | Modify material |
manage_asset_database | Asset DB operations |
analyze_asset_dependencies | Dependency analysis |
manage_asset_import_settings | Import settings |
addressables_manage | Addressables management |
addressables_build | Addressables build |
addressables_analyze | Addressables analysis |
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.