Unity Component logo

Unity Component

CommunityPopular
Besty0728
unity-component

Manage GameObject components

Overview

PublisherBesty0728
RepositoryUnity-Skills
Skill nameunity-component
Stars
1.8K
Forks
164
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by Besty0728 on GitHub. Read the source before you install it.

Installation

Install the Unity Component AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.

Use it in TypingMind

Enable Unity Component in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Unity Component on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Unity Component is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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

  • Attaching or removing components
  • Copying components between objects
  • Toggling components
  • Reading/writing serialized fields
  • 挂载或移除组件、在对象间复制组件、开关组件、读写序列化字段

Unity Component Skills

BATCH-FIRST: Use *_batch skills when operating on 2+ objects to reduce API calls from N to 1.

Operating Mode

  • Approval:本模块 Mixed —— component_list / component_get_propertiesSkillMode.SemiAuto,可直接执行;写类 skill (component_add / component_set_property / component_set_enabled / component_copy 等) 标 SkillMode.FullAuto,需 grant 单次执行返结果。
  • Auto / Bypass:FullAuto 直接执行。
  • 含 NeverInSemi 高危 skillcomponent_remove / component_remove_batch(Operation.Delete)。这些在 Approval/Auto 下返 MODE_FORBIDDEN,仅 Bypass 或 Allowlist 命中可调。

DO NOT (common hallucinations):

  • component_create / component_get do not exist → use component_add (add) and component_get_properties (read)
  • component_find does not exist → use component_list to list components on an object
  • componentType is case-sensitive — Rigidbody not rigidbody, BoxCollider not boxcollider
  • Custom scripts need exact class name; if namespaced, use Namespace.ClassName

Routing:

  • To create a C# component script → use script module's script_create first, then component_add
  • To set multiple properties at once → use component_set_property_batch
  • To enable/disable a component → component_set_enabled (not component_set_property)

Object Targeting: All single-object skills accept name (string), instanceId (int, preferred), and path (string, hierarchy path). Provide at least one.

Skills Overview

Single ObjectBatch VersionUse Batch When
component_addcomponent_add_batchAdding to 2+ objects
component_removecomponent_remove_batchRemoving from 2+ objects
component_set_propertycomponent_set_property_batchSetting on 2+ objects
component_set_serialized_propertycomponent_set_serialized_property_batchSetting Inspector SerializedProperty paths

Other Skills (no batch):

  • component_list - List all components on an object
  • component_get_properties - Get component property values
  • component_set_enabled - Enable/disable a component (Behaviour, Renderer, Collider)
  • component_copy - Copy a component from one object to another
  • component_get_serialized_properties - List Inspector SerializedProperty paths
  • component_copy_exact - Copy a component and verify serialized fields match

Single-Object Skills

component_add

Add a component to a GameObject.

ParameterTypeRequiredDescription
namestringNo*GameObject name
instanceIdintNo*Instance ID (preferred)
pathstringNo*Hierarchy path
componentTypestringYesComponent type name

*At least one identifier required

Returns: {success, gameObject, instanceId, component, fullTypeName} (returns {warning, gameObject, instanceId} instead if a single-instance component already exists)

component_remove

Remove a component from a GameObject.

ParameterTypeRequiredDefaultDescription
namestringNo*-GameObject name
instanceIdintNo*-Instance ID
pathstringNo*-Hierarchy path
componentTypestringYes-Component type to remove
componentIndexintNo0Index into the components of that type when 2+ exist on the same object

Returns: {success, gameObject, removed} (removed is the requested componentType string)

component_list

List all components on a GameObject.

ParameterTypeRequiredDescription
namestringNo*GameObject name
instanceIdintNo*Instance ID

Returns: {gameObject, instanceId, path, componentCount, components: [{type, fullType, enabled, keyProperties?}]} (keyProperties only present when includeProperties=true)

component_set_property

Set a component property value.

ParameterTypeRequiredDescription
namestringNo*GameObject name
instanceIdintNo*Instance ID
pathstringNo*Hierarchy path
componentTypestringYesComponent type
propertyNamestringYesC# property/field name — see the serialized-name note below
valuestringCond.New value (basic types, vectors, colors, enums) — wire format below
referencePathstringNoScene object hierarchy path (for scene references)
referenceNamestringNoScene object name (for scene references)
assetPathstringNoProject asset path (for asset references: Material, Texture, AudioClip, ScriptableObject, Prefab, etc.)

Which of the four value parameters to use — exactly one carries the payload, and they are checked in this order: assetPath first, then referencePath / referenceName, and value only if neither reference form was supplied. So a value sent alongside an assetPath is silently ignored; never send two.

UseWhen the target field isExample
valuea primitive, vector, colour, enum, LayerMask, Rect, Bounds, Quaternionvalue="2.5", value="Interpolate"
referencePatha scene object, addressed by hierarchy path (unambiguous)referencePath="Root/Player/Hand"
referenceNamea scene object, addressed by name (first match wins)referenceName="Player"
assetPatha project asset — Material, Texture, AudioClip, ScriptableObject, PrefabassetPath="Assets/Materials/Red.mat"

Wire format of value — multi-component values travel as a comma-separated string: "1,2,3" for a Vector3, "1,0.5,0,1" for an RGBA colour, "0,90,0" for a Quaternion (3 values = Euler, 4 = xyzw). The JSON object form ({"x":1,"y":2,"z":3} / {"r":1,"g":0,"b":0,"a":1}) is accepted only for Vector2/Vector3/Vector4 and Color/Color32, and every component is required: {"y":2} for a Vector3 is rejected naming the missing x, z rather than silently zeroing them. The one optional key is a colour's a, which defaults to 1r, g, b are required. An explicit null counts as not supplied, so it fails the same way for a required key. An unrecognised key is rejected with the list of keys that were expected, and a non-numeric value is rejected naming the offending key. Vector2Int/Vector3Int, Quaternion, Rect and Bounds take the comma-separated string only — a JSON object for those fails. Colours additionally accept #RRGGBB / #RRGGBBAA hex and ten names: red, green, blue, white, black, yellow, cyan, magenta, gray/grey, clear. Enums take the member name, case-insensitively. Bools accept true/1/yes/on.

python
# float / int / bool / string
call_skill("component_set_property", name="Obj", componentType="Rigidbody", propertyName="mass", value=2.5)
call_skill("component_set_property", name="Obj", componentType="Rigidbody", propertyName="useGravity", value=False)

# Vector3
call_skill("component_set_property", name="Obj", componentType="Transform", propertyName="localPosition",
           value="1,2,3")

# Color — comma string, hex, or a name
call_skill("component_set_property", name="Obj", componentType="Light", propertyName="color", value="1,0.5,0,1")
call_skill("component_set_property", name="Obj", componentType="Light", propertyName="color", value="#FF8000")

# Enum (member name)
call_skill("component_set_property", name="Obj", componentType="Rigidbody", propertyName="interpolation",
           value="Interpolate")

Returns: {success, gameObject, component, property, valueSet, valueType} (valueSet is the string form of the actual value applied; valueType is the resolved target type name)

component_get_properties

Get all properties of a component.

ParameterTypeRequiredDescription
namestringNo*GameObject name
instanceIdintNo*Instance ID
componentTypestringYesComponent type

Returns: {gameObject, component, fullTypeName, properties: [{name, type, fullType, value, canWrite}], fields: [{name, type, fullType, value, isSerializable}]}

component_get_serialized_properties

List Inspector serialized properties on a component via SerializedObject.

ParameterTypeRequiredDescription
namestringNo*GameObject name
instanceIdintNo*Instance ID
pathstringNo*Hierarchy path
componentTypestringYesComponent type
includeChildrenboolNoInclude nested properties
limitintNoMax properties returned

Returns: {success, gameObject, component, fullTypeName, properties}

The names here are not the names you write with. This skill reads Unity's serialized backing fields, so a Rigidbody's kinematic flag comes back as m_IsKinematic, its mass as m_Mass. component_set_property / component_get_properties work on the C# API names instead — isKinematic, mass. To convert: drop the m_ prefix and lowercase the first letter. Feed the m_-prefixed path back only to component_set_serialized_property, which expects a propertyPath verbatim. Writing m_IsKinematic through component_set_property fails with "Property/field not found" (and the error lists the available properties).

component_set_serialized_property

Set an Inspector serialized property by propertyPath.

ParameterTypeRequiredDescription
namestringNo*GameObject name
instanceIdintNo*Instance ID
pathstringNo*Hierarchy path
componentTypestringYesComponent type
propertyPathstringYesSerializedProperty path, e.g. items.Array.data[0]
valuestringCond.Primitive/vector/color/enum value
referenceNamestringNoScene object name for ObjectReference
referenceInstanceIdintNoScene object instance ID for ObjectReference
referencePathstringNoScene object path for ObjectReference
assetPathstringNoProject asset path for ObjectReference
objectTypestringNoExpected object/component type for references

Provide value for scalar properties, or a scene/project reference for ObjectReference fields.

Returns: {success, gameObject, component, propertyPath, valueSet}


Batch Skills

component_add_batch

Add components to multiple objects.

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

Returns: {success, totalItems, successCount, failCount, results: [{success, gameObject, componentType, added}]}

python
unity_skills.call_skill("component_add_batch", items=[
    {"name": "Enemy1", "componentType": "Rigidbody"},
    {"name": "Enemy2", "componentType": "Rigidbody"},
    {"name": "Enemy3", "componentType": "Rigidbody"}
])

component_remove_batch

Remove components from multiple objects.

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

Returns: {success, totalItems, successCount, failCount, results: [{success, gameObject, componentType, removed}]}

python
unity_skills.call_skill("component_remove_batch", items=[
    {"instanceId": 12345, "componentType": "BoxCollider"},
    {"instanceId": 12346, "componentType": "BoxCollider"}
])

component_set_property_batch

Set properties on multiple objects.

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

Returns: {success, totalItems, successCount, failCount, results: [{success, gameObject, componentType, property, oldValue, newValue}]}

python
unity_skills.call_skill("component_set_property_batch", items=[
    {"name": "Enemy1", "componentType": "Rigidbody", "propertyName": "mass", "value": 2.0},
    {"name": "Enemy2", "componentType": "Rigidbody", "propertyName": "mass", "value": 2.0}
])

component_set_serialized_property_batch

Set Inspector serialized properties on multiple components.

ParameterTypeRequiredDefaultDescription
itemsjson stringYes-JSON array of per-item objects

Item properties: name, instanceId, path, componentType, propertyPath, value, referenceName, referenceInstanceId, referencePath, assetPath, objectType

Returns: {success, totalItems, successCount, failCount, results}


Common Component Types

Physics

TypeDescription
RigidbodyPhysics simulation
BoxColliderBox collision
SphereColliderSphere collision
CapsuleColliderCapsule collision
MeshColliderMesh-based collision
CharacterControllerCharacter movement

Rendering

TypeDescription
MeshRendererRender meshes
SkinnedMeshRendererAnimated meshes
SpriteRenderer2D sprites
LineRendererDraw lines
TrailRendererMotion trails

Audio

TypeDescription
AudioSourcePlay sounds
AudioListenerReceive audio

UI

TypeDescription
CanvasUI container
ImageUI images
TextUI text (legacy)
ButtonClickable button

Example: Efficient Physics Setup

python
import unity_skills

# BAD: 6 API calls
unity_skills.call_skill("component_add", name="Box1", componentType="Rigidbody")
unity_skills.call_skill("component_add", name="Box2", componentType="Rigidbody")
unity_skills.call_skill("component_add", name="Box3", componentType="Rigidbody")
unity_skills.call_skill("component_set_property", name="Box1", componentType="Rigidbody", propertyName="mass", value=2.0)
unity_skills.call_skill("component_set_property", name="Box2", componentType="Rigidbody", propertyName="mass", value=2.0)
unity_skills.call_skill("component_set_property", name="Box3", componentType="Rigidbody", propertyName="mass", value=2.0)

# GOOD: 2 API calls
unity_skills.call_skill("component_add_batch", items=[
    {"name": "Box1", "componentType": "Rigidbody"},
    {"name": "Box2", "componentType": "Rigidbody"},
    {"name": "Box3", "componentType": "Rigidbody"}
])
unity_skills.call_skill("component_set_property_batch", items=[
    {"name": "Box1", "componentType": "Rigidbody", "propertyName": "mass", "value": 2.0},
    {"name": "Box2", "componentType": "Rigidbody", "propertyName": "mass", "value": 2.0},
    {"name": "Box3", "componentType": "Rigidbody", "propertyName": "mass", "value": 2.0}
])

Best Practices

  1. Add colliders before Rigidbody for physics
  2. Use component_list to verify additions
  3. Check property names with component_get_properties first
  4. Some properties are read-only (will fail to set)
  5. Use full type names for custom scripts (e.g., "MyNamespace.MyScript")

Additional Skills

component_copy

Copy a component from one GameObject to another.

ParameterTypeRequiredDefaultDescription
sourceNamestringNo*nullSource GameObject name
sourceInstanceIdintNo*0Source Instance ID
sourcePathstringNo*nullSource hierarchy path
targetNamestringNo*nullTarget GameObject name
targetInstanceIdintNo*0Target Instance ID
targetPathstringNo*nullTarget hierarchy path
componentTypestringYes-Component type to copy

*At least one source identifier and one target identifier required

Returns: { success, source, target, componentType }

component_copy_exact

Copy a component from one GameObject to another and verify serialized Inspector fields match.

ParameterTypeRequiredDefaultDescription
sourceNamestringNo*nullSource GameObject name
sourceInstanceIdintNo*0Source Instance ID
sourcePathstringNo*nullSource hierarchy path
targetNamestringNo*nullTarget GameObject name
targetInstanceIdintNo*0Target Instance ID
targetPathstringNo*nullTarget hierarchy path
componentTypestringYes-Component type to copy

Returns: { success, source, target, componentType, verified, mismatchCount, mismatches? }

component_set_enabled

Enable or disable a component (Behaviour, Renderer, Collider, etc.).

ParameterTypeRequiredDefaultDescription
namestringNo*nullGameObject name
instanceIdintNo*0Instance ID
pathstringNo*nullHierarchy path
componentTypestringYes-Component type to enable/disable
enabledboolNotrueWhether to enable or disable

*At least one identifier required

Returns: { success, gameObject, componentType, enabled }


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 GameObject, component type, component instance, property/field, or asset reference could not be located.List components with component_list, resolve asset paths with asset_find, or verify the object with gameobject_find / scene_get_hierarchy.
MISSING_PARAMA required parameter is missing, such as componentType in component_add or componentType/propertyName in component_set_property.Provide the missing parameter; use mode=dryRun to preview the required arguments.
SEMANTIC_INVALIDA value is out of range or otherwise invalid, such as a componentIndex that exceeds the available components.Adjust the value to fit the valid range or enum described in the error message.
SKILL_ERRORA runtime constraint blocked the operation, such as a read-only property or a component that cannot be removed because it is required.Read the error message, resolve the underlying constraint (e.g., choose a writable property), then retry.

Frequently asked questions

What does the Unity Component AI skill do?

Manage GameObject components

Why use Unity Component on TypingMind?

Because you install it once and use it with any model. Unity Component is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Unity Component in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Besty0728/Unity-Skills/tree/main/SkillsForUnity/unity-skills~/skills/component. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Unity Component?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Unity Component?

As many as you like. As long as a model supports skills, you can use Unity Component with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Unity Component AI skill free?

Yes. It is published on GitHub by Besty0728 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇