<< All versions

Skill v1.0.4

currentAutomated scan100/100
besty0728/unity-skills/material

+1 new

──Details
PublishedAugust 18, 2026 at 07:35 PM
Content Hashsha256:c7fd2931a3353b29...
Git SHAa1ee16e0d432
Bump Typepatch
Compare with v1.0.3
──Files
Files (1 file, 15.4 KB)
SKILL.md15.4 KBactive
SKILL.md · 363 lines · 15.4 KB

version: "1.0.4" name: unity-material description: Edit material and shader properties across Built-in/URP/HDRP


Before calling any skill in this module: if you are about to call a skill with parameters guessed from its name or description, STOP — read this file (or fetch its schema via GET /skills/recommend?includeSchema=true) first. If you already have the parameter definitions from recommend/schema, you may proceed straight to dryRun.

Triggers

  • Changing how a surface looks
  • Tweaking material parameters
  • Swapping shaders
  • 调整物体外观、修改材质参数、切换 Shader

Unity Material Skills

BATCH-FIRST: Use *_batch skills when operating on 2+ objects/materials.

Operating Mode

  • Approval (default): all mutating skills (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.
  • Auto / Bypass: those skills execute directly.
  • Query skills (material_get_properties, material_get_keywords) are SkillMode.SemiAuto — they run in all three modes without grant.
  • This module contains no Delete / PlayMode / Reload / high-risk skills (no NeverInSemi); to delete a material asset, call the asset module.

Guardrails

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–255
  • material_set_property does not exist → use the specific setter: material_set_float, material_set_int, material_set_vector, material_set_color
  • material_get_color does not exist → use material_get_properties (returns all properties including colors)

Routing:

  • For shader changes → material_set_shader (this module)
  • For texture tiling → material_set_texture_scale / material_set_texture_offset
  • Pipeline-specific property names differ: check Render Pipeline Compatibility table in this doc
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.

Skills Overview

Single ObjectBatch VersionUse Batch When
material_creatematerial_create_batchCreating 2+ materials
material_assignmaterial_assign_batchAssigning to 2+ objects
material_set_colormaterial_set_colors_batchSetting colors on 2+ objects
material_set_emissionmaterial_set_emission_batchSetting emission on 2+ objects

No batch needed:

  • material_set_texture - Set texture
  • material_set_texture_offset/scale - Texture tiling
  • material_set_float/int/vector - Set properties
  • material_set_keyword - Enable/disable shader keywords
  • material_set_render_queue - Set render queue
  • material_set_shader - Change shader
  • material_get_properties/keywords - Query properties
  • material_duplicate - Duplicate material

Skills

material_create

Create a new material (auto-detects render pipeline).

ParameterTypeRequiredDefaultDescription
namestringYes-Material name
shaderNamestringNoauto-detectShader (auto-detects URP/HDRP/Standard)
savePathstringNonullSave path (folder or full path)

material_create_batch

Create multiple materials.

ParameterTypeRequiredDefaultDescription
itemsjson stringYes-JSON array of per-item objects (see example below)

Returns: {success, totalItems, successCount, failCount, results: [{success, name, path}]}

python
unity_skills.call_skill("material_create_batch", items=[
{"name": "Red", "savePath": "Assets/Materials"},
{"name": "Blue", "savePath": "Assets/Materials"},
{"name": "Green", "savePath": "Assets/Materials"}
])

material_assign

Assign material to object's renderer.

ParameterTypeRequiredDescription
namestringNo*GameObject name
instanceIdintNo*Instance ID
pathstringNo*GameObject hierarchy path
materialPathstringYesMaterial asset to assign (e.g. Assets/Materials/X.mat)

material_assign_batch

Assign materials to multiple objects.

ParameterTypeRequiredDefaultDescription
itemsjson stringYes-JSON array of per-item objects (see example below)

Returns: {success, totalItems, successCount, failCount, results: [{success, name, materialPath}]}

python
unity_skills.call_skill("material_assign_batch", items=[
{"name": "Cube1", "materialPath": "Assets/Materials/Red.mat"},
{"name": "Cube2", "materialPath": "Assets/Materials/Blue.mat"}
])

material_set_color

Set material color with optional HDR intensity.

ParameterTypeRequiredDefaultDescription
namestringNo*GameObject name
pathstringNo*Material asset path
r, g, bfloatNo1Color (0-1)
afloatNo1Alpha
propertyNamestringNoauto-detectColor property
intensityfloatNo1.0HDR intensity (>1 for bloom)

material_set_colors_batch

Set colors on multiple objects. Each item accepts: identifier (name/instanceId/path) + r, g, b, a, optional per-item propertyName.

ParameterTypeRequiredDefaultDescription
itemsjson stringYes-JSON array of `{nameinstanceIdpath, r, g, b, a}` per-item objects (see example below)
propertyNamestringNoauto-detectDefault color property applied to all items unless overridden

Returns: {success, totalItems, successCount, failCount, results: [{success, name}]}

python
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}
])

material_set_emission

Set emission color with auto-enable keyword.

ParameterTypeRequiredDefaultDescription
namestringNo*GameObject name
pathstringNo*Material asset path
r, g, bfloatNo1Emission color (0-1)
intensityfloatNo1.0HDR intensity (>1 for bloom)
enableEmissionboolNotrueAuto-enable _EMISSION keyword

material_set_emission_batch

Set emission on multiple objects.

ParameterTypeRequiredDefaultDescription
itemsjson stringYes-JSON array of per-item objects (see example below)

Returns: {success, totalItems, successCount, failCount, results: [{success, name}]}

python
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}
])

material_set_texture

Set material texture.

ParameterTypeRequiredDefaultDescription
namestringNo*GameObject name
pathstringNo*Material asset path
texturePathstringYes-Texture asset path
propertyNamestringNoauto-detectTexture property

material_set_float

Set a float property on a material.

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path
propertyNamestringYesProperty name
valuefloatYesValue

material_set_int

Set an integer property on a material.

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path
propertyNamestringYesProperty name
valueintYesValue

material_set_keyword

Enable/disable shader keywords.

ParameterTypeRequiredDefaultDescription
namestringNo*GameObject name
pathstringNo*Material asset path
keywordstringYes-Keyword name
enableboolNotrueEnable or disable

Common Keywords: _EMISSION, _NORMALMAP, _METALLICGLOSSMAP, _ALPHATEST_ON, _ALPHABLEND_ON

material_get_properties

Get all material properties.

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path

Returns: {success, target, shader, renderQueue, keywords, giFlags, properties: {colors, floats, vectors, textures, integers}}

material_get_keywords

Get all enabled shader keywords on a material.

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path

material_duplicate

Duplicate a material asset.

ParameterTypeRequiredDescription
sourcePathstringYesSource material path
newNamestringYesName for the duplicated material
savePathstringNoOptional folder/path override for the duplicated material

material_set_shader

Change the shader of a material.

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path
shaderNamestringYesShader name

material_set_vector

Set a Vector4 property on a material.

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path
propertyNamestringYesProperty name
x, y, z, wfloatYesVector components

material_set_texture_offset

Set texture offset (tiling position).

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path
propertyNamestringNoTexture property name
x, yfloatYesOffset values

material_set_texture_scale

Set texture scale (tiling).

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path
propertyNamestringNoTexture property name
x, yfloatYesScale values

material_set_render_queue

Set material render queue.

ParameterTypeRequiredDescription
namestringNo*GameObject name
pathstringNo*Material asset path
renderQueueintYesRender queue value

material_set_gi_flags

Set material global illumination flags.

ParameterTypeRequiredDefaultDescription
namestringNo*-GameObject name
pathstringNo*-GameObject hierarchy path or material asset path
flagsstringNoRealtimeEmissiveGI flags: None / RealtimeEmissive / BakedEmissive / EmissiveIsBlack / AnyEmissive

Example: Efficient Material Setup

python
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"}
])

Render Pipeline Compatibility

Skills auto-detect and adapt to your render pipeline:

PipelineDefault ShaderColor PropertyTexture Property
Built-inStandard_Color_MainTex
URPUniversal Render Pipeline/Lit_BaseColor_BaseMap
HDRPHDRP/Lit_BaseColor_BaseColorMap

Best Practices

  1. Save materials as assets for reuse
  2. Use material instances (by name) for runtime changes
  3. Use material assets (by path) for persistent changes
  4. Check shader property names in Unity Inspector
  5. URP/HDRP have different property names than Standard

Exact Signatures

Exact names, parameters, defaults, and returns are defined by GET /skills/schema or unity_skills.get_skill_schema(), not by this file.

Common Errors

Full transport-level codes (COMPILING/RATE_LIMIT etc.) → ../../references/protocol-error-codes.md

ErrorTriggerFix
TARGET_NOT_FOUNDThe material asset, GameObject/renderer, shader, texture, or property could not be found (e.g., Material asset not found, No Renderer component found, Shader not found).Verify the asset path with asset_find, the object with gameobject_find, or inspect available properties with material_get_properties.
MISSING_PARAMA required parameter is missing, such as materialPath, sourcePath, texturePath, propertyName, keyword, or shaderName.Supply the parameter named in the error and retry; use mode=dryRun for the full schema.
SEMANTIC_INVALIDAn invalid value was supplied, such as an unrecognized GI flag, an invalid asset path, or a property name the shader does not use.Correct the value using the allowed range/enum/path convention described in the error.
← v1.0.3All versions