Edit Unity material and shader properties across Built-in/URP/HDRP — colors, textures, floats, keywords, render queue, batch-apply. Use when changing how a surface looks, tweaking material parameters, or swapping shaders. 编辑材质与 Shader 属性(Built-in/URP/HDRP:颜色、贴图、浮点值、关键字、渲染队列、批量应用);当用户要调整物体外观、改材质参数或切换 Shader 时使用。
npx skills add https://github.com/Besty0728/Unity-Skills --skill unity-material
> BATCH-FIRST: Use *_batch skills when operating on 2+ objects/materials.
material_create, material_create_batch, material_assign, material_assign_batch, material_duplicate, material_set_color / _emission / _texture / _float / _int / _vector / _keyword / _render_queue / _shader / _texture_offset / _texture_scale / _gi_flags, and the *_batch variants) need user grant; grant triggers a single server-side execution that returns the result.material_get_properties, material_get_keywords) are SkillMode.SemiAuto — they run in all three modes without grant.asset module.DO NOT (common hallucinations):
material_set_metallic / material_set_smoothness do not exist → use material_set_float with propertyName="_Metallic" or "_Glossiness" (Standard) / "_Smoothness" (URP)material_set_color r/g/b/a range is 0–1, not 0–255material_set_property does not exist → use the specific setter: material_set_float, material_set_int, material_set_vector, material_set_colormaterial_get_color does not exist → use material_get_properties (returns all properties including colors)Routing:
material_set_shader (this module)material_set_texture_scale / material_set_texture_offset> Object Targeting: Most single-object skills accept name (GameObject name) or path. Behaviour of path:
> - In material_set_* / material_get_* (color/emission/texture/float/int/vector/keyword/shader/render_queue/gi_flags/properties), path may be either a GameObject hierarchy path *or* a material asset path like Assets/Materials/X.mat — the skill auto-detects (paths starting with Assets/ or ending with .mat are treated as material assets).
> - In material_assign, path is a GameObject hierarchy path only; the material to assign goes in the separate materialPath parameter.
| Single Object | Batch Version | Use Batch When |
|---------------|---------------|----------------|
| material_create | material_create_batch | Creating 2+ materials |
| material_assign | material_assign_batch | Assigning to 2+ objects |
| material_set_color | material_set_colors_batch | Setting colors on 2+ objects |
| material_set_emission | material_set_emission_batch | Setting emission on 2+ objects |
No batch needed:
material_set_texture - Set texturematerial_set_texture_offset/scale - Texture tilingmaterial_set_float/int/vector - Set propertiesmaterial_set_keyword - Enable/disable shader keywordsmaterial_set_render_queue - Set render queuematerial_set_shader - Change shadermaterial_get_properties/keywords - Query propertiesmaterial_duplicate - Duplicate materialCreate a new material (auto-detects render pipeline).
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| name | string | Yes | - | Material name |
| shaderName | string | No | auto-detect | Shader (auto-detects URP/HDRP/Standard) |
| savePath | string | No | null | Save path (folder or full path) |
Create multiple materials.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| items | json string | Yes | - | JSON array of per-item objects (see example below) |
Returns: {success, totalItems, successCount, failCount, results: [{success, name, path}]}
unity_skills.call_skill("material_create_batch", items=[
{"name": "Red", "savePath": "Assets/Materials"},
{"name": "Blue", "savePath": "Assets/Materials"},
{"name": "Green", "savePath": "Assets/Materials"}
])
Assign material to object's renderer.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| instanceId | int | No* | Instance ID |
| path | string | No* | GameObject hierarchy path |
| materialPath | string | Yes | Material asset to assign (e.g. Assets/Materials/X.mat) |
Assign materials to multiple objects.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| items | json string | Yes | - | JSON array of per-item objects (see example below) |
Returns: {success, totalItems, successCount, failCount, results: [{success, name, materialPath}]}
unity_skills.call_skill("material_assign_batch", items=[
{"name": "Cube1", "materialPath": "Assets/Materials/Red.mat"},
{"name": "Cube2", "materialPath": "Assets/Materials/Blue.mat"}
])
Set material color with optional HDR intensity.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| r, g, b | float | No | 1 | Color (0-1) |
| a | float | No | 1 | Alpha |
| propertyName | string | No | auto-detect | Color property |
| intensity | float | No | 1.0 | HDR intensity (>1 for bloom) |
Set colors on multiple objects. Each item accepts: identifier (name/instanceId/path) + r, g, b, a, optional per-item propertyName.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| items | json string | Yes | - | JSON array of {name|instanceId|path, r, g, b, a} per-item objects (see example below) |
| propertyName | string | No | auto-detect | Default color property applied to all items unless overridden |
Returns: {success, totalItems, successCount, failCount, results: [{success, name}]}
unity_skills.call_skill("material_set_colors_batch", items=[
{"name": "Cube1", "r": 1, "g": 0, "b": 0},
{"name": "Cube2", "r": 0, "g": 1, "b": 0},
{"name": "Cube3", "r": 0, "g": 0, "b": 1}
])
Set emission color with auto-enable keyword.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| r, g, b | float | No | 1 | Emission color (0-1) |
| intensity | float | No | 1.0 | HDR intensity (>1 for bloom) |
| enableEmission | bool | No | true | Auto-enable _EMISSION keyword |
Set emission on multiple objects.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| items | json string | Yes | - | JSON array of per-item objects (see example below) |
Returns: {success, totalItems, successCount, failCount, results: [{success, name}]}
unity_skills.call_skill("material_set_emission_batch", items=[
{"name": "Neon1", "r": 1, "g": 0, "b": 1, "intensity": 5.0},
{"name": "Neon2", "r": 0, "g": 1, "b": 1, "intensity": 5.0}
])
Set material texture.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| texturePath | string | Yes | - | Texture asset path |
| propertyName | string | No | auto-detect | Texture property |
Set a float property on a material.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| propertyName | string | Yes | Property name |
| value | float | Yes | Value |
Set an integer property on a material.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| propertyName | string | Yes | Property name |
| value | int | Yes | Value |
Enable/disable shader keywords.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| keyword | string | Yes | - | Keyword name |
| enable | bool | No | true | Enable or disable |
Common Keywords: _EMISSION, _NORMALMAP, _METALLICGLOSSMAP, _ALPHATEST_ON, _ALPHABLEND_ON
Get all material properties.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
Returns: {success, target, shader, renderQueue, keywords, giFlags, properties: {colors, floats, vectors, textures, integers}}
Get all enabled shader keywords on a material.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
Duplicate a material asset.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| sourcePath | string | Yes | Source material path |
| newName | string | Yes | Name for the duplicated material |
| savePath | string | No | Optional folder/path override for the duplicated material |
Change the shader of a material.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| shaderName | string | Yes | Shader name |
Set a Vector4 property on a material.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| propertyName | string | Yes | Property name |
| x, y, z, w | float | Yes | Vector components |
Set texture offset (tiling position).
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| propertyName | string | No | Texture property name |
| x, y | float | Yes | Offset values |
Set texture scale (tiling).
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| propertyName | string | No | Texture property name |
| x, y | float | Yes | Scale values |
Set material render queue.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| name | string | No* | GameObject name |
| path | string | No* | Material asset path |
| renderQueue | int | Yes | Render queue value |
Set material global illumination flags.
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| name | string | No* | - | GameObject name |
| path | string | No* | - | GameObject hierarchy path or material asset path |
| flags | string | No | RealtimeEmissive | GI flags: None / RealtimeEmissive / BakedEmissive / EmissiveIsBlack / AnyEmissive
import unity_skills
# BAD: 6 API calls
unity_skills.call_skill("material_create", name="Mat1", savePath="Assets/Materials")
unity_skills.call_skill("material_create", name="Mat2", savePath="Assets/Materials")
unity_skills.call_skill("material_set_color", path="Assets/Materials/Mat1.mat", r=1, g=0, b=0)
unity_skills.call_skill("material_set_color", path="Assets/Materials/Mat2.mat", r=0, g=0, b=1)
unity_skills.call_skill("material_assign", name="Cube1", materialPath="Assets/Materials/Mat1.mat")
unity_skills.call_skill("material_assign", name="Cube2", materialPath="Assets/Materials/Mat2.mat")
# GOOD: 3 API calls
unity_skills.call_skill("material_create_batch", items=[
{"name": "Mat1", "savePath": "Assets/Materials"},
{"name": "Mat2", "savePath": "Assets/Materials"}
])
unity_skills.call_skill("material_set_colors_batch", items=[
{"path": "Assets/Materials/Mat1.mat", "r": 1, "g": 0, "b": 0},
{"path": "Assets/Materials/Mat2.mat", "r": 0, "g": 0, "b": 1}
])
unity_skills.call_skill("material_assign_batch", items=[
{"name": "Cube1", "materialPath": "Assets/Materials/Mat1.mat"},
{"name": "Cube2", "materialPath": "Assets/Materials/Mat2.mat"}
])
Skills auto-detect and adapt to your render pipeline:
| Pipeline | Default Shader | Color Property | Texture Property |
|----------|---------------|----------------|------------------|
| Built-in | Standard | _Color | _MainTex |
| URP | Universal Render Pipeline/Lit | _BaseColor | _BaseMap |
| HDRP | HDRP/Lit | _BaseColor | _BaseColorMap |
Exact names, parameters, defaults, and returns are defined by GET /skills/schema or unity_skills.get_skill_schema(), not by this file.
A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Extracts and analyzes competitors' ads from ad libraries (Facebook, LinkedIn, etc.) to understand what messaging, problems, and creative approaches are working. Helps inspire and improve your own ad campaigns.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Complete App Store Optimization (ASO) toolkit for researching, optimizing, and tracking mobile app performance on Apple App Store and Google Play Store
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Materials science toolkit. Crystal structures (CIF, POSCAR), phase diagrams, band structure, DOS, Materials Project integration, format conversion, for computational materials science.
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.
Take besty0728/unity-material from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.