Unity Light logo

Unity Light

CommunityPopular
Besty0728
unity-light

Create and configure Unity lights

Overview

PublisherBesty0728
RepositoryUnity-Skills
Skill nameunity-light
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 Light 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 Light 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 Light 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 Light 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

  • Adding or tuning lights
  • Setting up scene lighting
  • Batch-enabling/disabling lights
  • 添加或调校灯光、布置场景照明、批量开关灯光

Unity Light Skills

BATCH-FIRST: Use *_batch skills when operating on 2+ lights.

Operating Mode

  • Approval (default): mutating skills (light_create, light_set_properties, light_set_properties_batch, light_set_enabled, light_set_enabled_batch, light_add_probe_group, light_add_reflection_probe) need user grant; grant triggers a single server-side execution that returns the result.
  • Auto / Bypass: those skills execute directly.
  • Query skills (light_get_info, light_get_properties, light_find_all, light_get_lightmap_settings) are SkillMode.SemiAuto — they run in all three modes without grant.
  • This module contains no Delete / PlayMode / Reload / high-risk skills (no NeverInSemi); to remove a Light, call gameobject_delete from the gameobject module.

Guardrails

DO NOT (common hallucinations):

  • light_add does not exist → use light_create (creates a new light GameObject)
  • light_set_color / light_set_intensity do not exist → use light_set_properties (sets color, intensity, range, shadows together)
  • light_delete does not exist → use gameobject_delete on the light's GameObject
  • light_set_shadow does not exist → use light_set_properties with the shadows parameter
  • shadows values are the Unity enum members None / Hard / Soft. Input is matched case-insensitively ("soft" still works) but responses always echo the capitalised form, so compare against Soft, not soft, when verifying

Routing:

  • For lightmap baking settings → light_get_lightmap_settings (this module)
  • For reflection probes → light_add_reflection_probe (this module)
  • For light probe groups → light_add_probe_group (this module)

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

Skills Overview

Single ObjectBatch VersionUse Batch When
light_set_propertieslight_set_properties_batchConfiguring 2+ lights
light_set_enabledlight_set_enabled_batchToggling 2+ lights

No batch needed:

  • light_create - Create a light
  • light_get_info - Get light information (light_get_properties is an alias of it)
  • light_find_all - Find all lights (returns list)
  • light_add_probe_group - Add a Light Probe Group with optional grid layout
  • light_add_reflection_probe - Create a Reflection Probe at a position
  • light_get_lightmap_settings - Inspect Lightmap baking settings

Light Types

TypeDescriptionUse Case
DirectionalParallel rays, no positionSun, moon
PointOmnidirectional from a pointTorches, bulbs
SpotCone-shaped beamFlashlights, spotlights
AreaRectangle/disc (baked only)Windows, soft lights

Skills

light_create

Create a new light.

ParameterTypeRequiredDefaultDescription
namestringNo"New Light"Light name
lightTypestringNo"Point"Directional/Point/Spot/Area
x, y, zfloatNo0,3,0Position
r, g, bfloatNo1,1,1Color (0-1)
intensityfloatNo1Light intensity
rangefloatNo10Range (Point/Spot)
spotAnglefloatNo30Cone angle (Spot only)
shadowsstringNo"Soft"None / Hard / Soft

Returns: {success, name, instanceId, lightType, position, color, intensity, shadows}

light_set_properties

Configure light properties. Every parameter is optional and omitted ones keep their current value.

ParameterTypeRequiredDescription
namestringNo*Light object name
instanceIdintNo*Instance ID (preferred)
pathstringNo*Hierarchy path
r, g, bfloatNoColor (0-1); each channel defaults to the light's current value
afloatNoColour alpha (0-1)
intensityfloatNoLight intensity
rangefloatNoRange (Point/Spot only)
spotAnglefloatNoCone angle (Spot only)
shadowsstringNoNone / Hard / Soft

Returns: {success, name, applied, skipped, lightType, color, intensity, range, spotAngle, shadows}applied lists the parameters that took effect, named exactly as you passed them (the colour channels appear individually as r, g, b, a, not lumped under color), and skipped the ones the light type cannot carry (a range on a Directional light, a spotAngle on anything but a Spot), each with the reason. A parameter in neither list was not supplied.

An unrecognised shadows value rejects the whole call with SEMANTIC_INVALID + validValues and applies nothing, so a typo can no longer leave a half-configured light behind.

light_set_properties_batch

Configure multiple lights. Each item accepts: name/instanceId/path (identifier) + r, g, b, a, intensity, range, shadows (all optional). A bad shadows value fails that item with SEMANTIC_INVALID + validValues and names the object in target; the other items still run.

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("light_set_properties_batch", items=[
    {"name": "Light1", "intensity": 2.0, "r": 1, "g": 0.9, "b": 0.8},
    {"instanceId": 12345, "intensity": 1.5, "shadows": "soft"},
    {"name": "Light3", "intensity": 2.0}
])

light_set_enabled

Enable or disable a light.

ParameterTypeRequiredDefaultDescription
namestringNo*-Light object name
instanceIdintNo*-Instance ID
pathstringNo*-Hierarchy path
enabledboolNotrueEnable state

Returns: {success, name, enabled}

light_set_enabled_batch

Enable or disable multiple lights.

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

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

python
unity_skills.call_skill("light_set_enabled_batch", items=[
    {"name": "Torch1", "enabled": False},
    {"name": "Torch2", "enabled": False},
    {"name": "Torch3", "enabled": False}
])

light_get_info

Get detailed light information.

ParameterTypeRequiredDescription
namestringNo*Light object name
instanceIdintNo*Instance ID
pathstringNo*Hierarchy path

Returns: {name, entityId, instanceId, path, lightType, color, intensity, range, spotAngle, shadows, enabled, cullingMask, bounceIntensity}

light_get_properties

Alias of light_get_info — same parameters, same response. It exists because the setter is light_set_properties, so the matching getter name resolves instead of 404-ing.

ParameterTypeRequiredDescription
namestringNo*Light object name
instanceIdintNo*Instance ID
pathstringNo*Hierarchy path

Returns: identical to light_get_info.

light_find_all

Find all lights in scene.

ParameterTypeRequiredDefaultDescription
lightTypestringNonullFilter by type
limitintNo50Max results

Returns: {count, lights: [{name, instanceId, path, lightType, intensity, enabled}]}

light_add_probe_group

Add a Light Probe Group to a GameObject. Optional grid layout: gridX/gridY/gridZ (count per axis), spacingX/spacingY/spacingZ (meters between probes).

ParameterTypeRequiredDefaultDescription
namestringNonullGameObject name
instanceIdintNo0Instance ID
pathstringNonullHierarchy path
gridXintNo0Probe count on X axis
gridYintNo0Probe count on Y axis
gridZintNo0Probe count on Z axis
spacingXfloatNo2Meters between probes on X
spacingYfloatNo1.5Meters between probes on Y
spacingZfloatNo2Meters between probes on Z

Returns: { success, gameObject, probeCount, existed, hasGrid }

light_add_reflection_probe

Create a Reflection Probe at a position.

ParameterTypeRequiredDefaultDescription
probeNamestringNo"ReflectionProbe"Probe name
x, y, zfloatNo0,1,0Position
sizeX, sizeY, sizeZfloatNo10,10,10Probe box size
resolutionintNo256Cubemap resolution

Returns: { success, name, instanceId, resolution, size }

light_get_lightmap_settings

Get Lightmap baking settings.

No parameters.

Returns: { success, bakedGI, realtimeGI, lightmapSize, lightmapPadding, isRunning, lightmapCount }


Example: Efficient Lighting Setup

python
import unity_skills

# BAD: 4 API calls
unity_skills.call_skill("light_set_properties", name="Light1", intensity=2.0)
unity_skills.call_skill("light_set_properties", name="Light2", intensity=2.0)
unity_skills.call_skill("light_set_properties", name="Light3", intensity=2.0)
unity_skills.call_skill("light_set_properties", name="Light4", intensity=2.0)

# GOOD: 1 API call
unity_skills.call_skill("light_set_properties_batch", items=[
    {"name": "Light1", "intensity": 2.0},
    {"name": "Light2", "intensity": 2.0},
    {"name": "Light3", "intensity": 2.0},
    {"name": "Light4", "intensity": 2.0}
])

Minimal Example

python
unity_skills.call_skill("light_create",
    name="Sun", lightType="Directional",
    r=1, g=0.95, b=0.85, intensity=1.2, shadows="soft"
)

Best Practices

  1. Use Directional light for main scene illumination
  2. Point lights for localized sources (lamps, fires)
  3. Spot lights for focused beams (flashlights, stage)
  4. Limit real-time shadows for performance
  5. Area lights require baking (not real-time)
  6. Use intensity > 1 for HDR/bloom effects

Exact Signatures

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

Frequently asked questions

What does the Unity Light AI skill do?

Create and configure Unity lights

Why use Unity Light on TypingMind?

Because you install it once and use it with any model. Unity Light 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 Light in TypingMind?

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

Which AI models can use Unity Light?

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 Light?

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

Is the Unity Light 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 👇