Kursach_StealthAction/.gemini/skills/particle-system-get/SKILL.md

21 KiB

name description metadata
particle-system-get Inspect a `UnityEngine.ParticleSystem` component on a GameObject — runtime state (playing/paused/emitting/stopped, particle count, time) plus opt-in serialized data for any of the ~24 particle modules (Main, Emission, Shape, Velocity, Noise, Collision, Trails, Renderer, etc.). Pair with 'particle-system-modify' to write changes back.
generated-by
mcp-plugin-dotnet

ParticleSystem / Get

Inspect a UnityEngine.ParticleSystem component on a GameObject. Returns runtime state (isPlaying, isPaused, isEmitting, isStopped, particleCount, time) plus opt-in serialized data for any of the particle modules. Use 'particle-system-modify' afterwards to write changes back.

Inputs

  • gameObjectRef — the GameObject hosting the ParticleSystem component (required).
  • componentRef — optional. Resolves a specific ParticleSystem when the GameObject has more than one; otherwise the first ParticleSystem found is used.
  • includeMain, includeEmission, includeShape, includeVelocityOverLifetime, includeLimitVelocityOverLifetime, includeInheritVelocity, includeLifetimeByEmitterSpeed, includeForceOverLifetime, includeColorOverLifetime, includeColorBySpeed, includeSizeOverLifetime, includeSizeBySpeed, includeRotationOverLifetime, includeRotationBySpeed, includeExternalForces, includeNoise, includeCollision, includeTrigger, includeSubEmitters, includeTextureSheetAnimation, includeLights, includeTrails, includeCustomData, includeRenderer — per-module toggles. includeMain defaults to true; everything else defaults to false.
  • includeAll — when true, overrides every per-module flag and emits all modules.
  • deepSerialization — when true, recurses through nested objects via ReflectorNet; otherwise only top-level members are serialized (cheaper, smaller payload).

Behavior

Only the modules whose include-flags resolve to true are serialized — this keeps responses small when you only need one or two modules. includeRenderer reads the sibling UnityEngine.ParticleSystemRenderer component on the same GameObject and is skipped silently when no renderer is present. The whole call runs on the Unity main thread.

How to Call

unity-mcp-cli run-tool particle-system-get --input '{
  "gameObjectRef": "string_value",
  "componentRef": "string_value",
  "includeMain": false,
  "includeEmission": false,
  "includeShape": false,
  "includeVelocityOverLifetime": false,
  "includeLimitVelocityOverLifetime": false,
  "includeInheritVelocity": false,
  "includeLifetimeByEmitterSpeed": false,
  "includeForceOverLifetime": false,
  "includeColorOverLifetime": false,
  "includeColorBySpeed": false,
  "includeSizeOverLifetime": false,
  "includeSizeBySpeed": false,
  "includeRotationOverLifetime": false,
  "includeRotationBySpeed": false,
  "includeExternalForces": false,
  "includeNoise": false,
  "includeCollision": false,
  "includeTrigger": false,
  "includeSubEmitters": false,
  "includeTextureSheetAnimation": false,
  "includeLights": false,
  "includeTrails": false,
  "includeCustomData": false,
  "includeRenderer": false,
  "includeAll": false,
  "deepSerialization": false
}'

For complex input (multi-line strings, code), save the JSON to a file and use:

unity-mcp-cli run-tool particle-system-get --input-file args.json

Or pipe via stdin (recommended):

unity-mcp-cli run-tool particle-system-get --input-file - <<'EOF'
{"param": "value"}
EOF

Troubleshooting

If unity-mcp-cli is not found, either install it globally (npm install -g unity-mcp-cli) or use npx unity-mcp-cli instead. Read the /unity-initial-setup skill for detailed installation instructions.

Input

Name Type Required Description
gameObjectRef any Yes Reference to the GameObject containing the ParticleSystem component.
componentRef any No Optional reference to a specific ParticleSystem component if the GameObject has multiple. If not provided, uses the first ParticleSystem found.
includeMain boolean No Include Main module data (duration, looping, prewarm, startDelay, startLifetime, startSpeed, startSize, startRotation, startColor, gravityModifier, simulationSpace, scalingMode, playOnAwake, maxParticles, etc.).
includeEmission boolean No Include Emission module data (rateOverTime, rateOverDistance, bursts).
includeShape boolean No Include Shape module data (shapeType, radius, angle, arc, position, rotation, scale, mesh, texture, etc.).
includeVelocityOverLifetime boolean No Include Velocity over Lifetime module data (x, y, z, space, orbital, radial, speedModifier).
includeLimitVelocityOverLifetime boolean No Include Limit Velocity over Lifetime module data (limit, dampen, separateAxes, drag).
includeInheritVelocity boolean No Include Inherit Velocity module data (mode, curve).
includeLifetimeByEmitterSpeed boolean No Include Lifetime by Emitter Speed module data (curve, range).
includeForceOverLifetime boolean No Include Force over Lifetime module data (x, y, z, space, randomized).
includeColorOverLifetime boolean No Include Color over Lifetime module data (color gradient).
includeColorBySpeed boolean No Include Color by Speed module data (color, range).
includeSizeOverLifetime boolean No Include Size over Lifetime module data (size curve, separateAxes).
includeSizeBySpeed boolean No Include Size by Speed module data (size, range).
includeRotationOverLifetime boolean No Include Rotation over Lifetime module data (angular velocity, separateAxes).
includeRotationBySpeed boolean No Include Rotation by Speed module data (angular velocity, range).
includeExternalForces boolean No Include External Forces module data (multiplier, influenceFilter).
includeNoise boolean No Include Noise module data (strength, frequency, scrollSpeed, damping, octaves, quality, remap).
includeCollision boolean No Include Collision module data (type, mode, planes, dampen, bounce, lifetimeLoss).
includeTrigger boolean No Include Trigger module data (inside, outside, enter, exit actions).
includeSubEmitters boolean No Include Sub Emitters module data (birth, collision, death, trigger, manual emitters).
includeTextureSheetAnimation boolean No Include Texture Sheet Animation module data (mode, tiles, animation, frameOverTime).
includeLights boolean No Include Lights module data (ratio, light, color, range, intensity).
includeTrails boolean No Include Trails module data (mode, ratio, lifetime, width, color).
includeCustomData boolean No Include Custom Data module data (modes, vectors, colors).
includeRenderer boolean No Include Renderer module data (renderMode, material, sortMode, alignment, shadows).
includeAll boolean No Include ALL modules data. Overrides individual flags.
deepSerialization boolean No Performs deep serialization including all nested objects. Otherwise, only serializes top-level members.

Input JSON Schema

{
  "type": "object",
  "properties": {
    "gameObjectRef": {
      "$ref": "#/$defs/AIGD.GameObjectRef"
    },
    "componentRef": {
      "$ref": "#/$defs/AIGD.ComponentRef"
    },
    "includeMain": {
      "type": "boolean"
    },
    "includeEmission": {
      "type": "boolean"
    },
    "includeShape": {
      "type": "boolean"
    },
    "includeVelocityOverLifetime": {
      "type": "boolean"
    },
    "includeLimitVelocityOverLifetime": {
      "type": "boolean"
    },
    "includeInheritVelocity": {
      "type": "boolean"
    },
    "includeLifetimeByEmitterSpeed": {
      "type": "boolean"
    },
    "includeForceOverLifetime": {
      "type": "boolean"
    },
    "includeColorOverLifetime": {
      "type": "boolean"
    },
    "includeColorBySpeed": {
      "type": "boolean"
    },
    "includeSizeOverLifetime": {
      "type": "boolean"
    },
    "includeSizeBySpeed": {
      "type": "boolean"
    },
    "includeRotationOverLifetime": {
      "type": "boolean"
    },
    "includeRotationBySpeed": {
      "type": "boolean"
    },
    "includeExternalForces": {
      "type": "boolean"
    },
    "includeNoise": {
      "type": "boolean"
    },
    "includeCollision": {
      "type": "boolean"
    },
    "includeTrigger": {
      "type": "boolean"
    },
    "includeSubEmitters": {
      "type": "boolean"
    },
    "includeTextureSheetAnimation": {
      "type": "boolean"
    },
    "includeLights": {
      "type": "boolean"
    },
    "includeTrails": {
      "type": "boolean"
    },
    "includeCustomData": {
      "type": "boolean"
    },
    "includeRenderer": {
      "type": "boolean"
    },
    "includeAll": {
      "type": "boolean"
    },
    "deepSerialization": {
      "type": "boolean"
    }
  },
  "$defs": {
    "UnityEngine.EntityId": {
      "type": "string",
      "pattern": "^[0-9]+$"
    },
    "System.Type": {
      "type": "string"
    },
    "AIGD.GameObjectRef": {
      "type": "object",
      "properties": {
        "instanceID": {
          "$ref": "#/$defs/UnityEngine.EntityId",
          "description": "instanceID of the UnityEngine.Object. If it is '0' and 'path', 'name', 'assetPath' and 'assetGuid' is not provided, empty or null, then it will be used as 'null'. Priority: 1 (Recommended)"
        },
        "path": {
          "type": "string",
          "description": "Path of a GameObject in the hierarchy Sample 'character/hand/finger/particle'. Priority: 2."
        },
        "name": {
          "type": "string",
          "description": "Name of a GameObject in hierarchy. Priority: 3."
        },
        "assetType": {
          "$ref": "#/$defs/System.Type",
          "description": "Type of the asset."
        },
        "assetPath": {
          "type": "string",
          "description": "Path to the asset within the project. Starts with 'Assets/'"
        },
        "assetGuid": {
          "type": "string",
          "description": "Unique identifier for the asset."
        }
      },
      "required": [
        "instanceID"
      ],
      "description": "Find GameObject in opened Prefab or in the active Scene."
    },
    "AIGD.ComponentRef": {
      "type": "object",
      "properties": {
        "index": {
          "type": "integer",
          "description": "Component 'index' attached to a gameObject. The first index is '0' and that is usually Transform or RectTransform. Priority: 2. Default value is -1."
        },
        "typeName": {
          "type": "string",
          "description": "Component type full name. Sample 'UnityEngine.Transform'. If the gameObject has two components of the same type, the output component is unpredictable. Priority: 3. Default value is null."
        },
        "instanceID": {
          "$ref": "#/$defs/UnityEngine.EntityId",
          "description": "instanceID of the UnityEngine.Object. If this is '0', then it will be used as 'null'."
        }
      },
      "required": [
        "index",
        "instanceID"
      ],
      "description": "Component reference. Used to find a Component at GameObject."
    }
  },
  "required": [
    "gameObjectRef"
  ]
}

Output

Output JSON Schema

{
  "type": "object",
  "properties": {
    "result": {
      "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.ParticleSystem.Editor.GetParticleSystemResponse",
      "description": "Response containing ParticleSystem data with requested modules."
    }
  },
  "$defs": {
    "AIGD.GameObjectRef": {
      "type": "object",
      "properties": {
        "instanceID": {
          "$ref": "#/$defs/UnityEngine.EntityId",
          "description": "instanceID of the UnityEngine.Object. If it is '0' and 'path', 'name', 'assetPath' and 'assetGuid' is not provided, empty or null, then it will be used as 'null'. Priority: 1 (Recommended)"
        },
        "path": {
          "type": "string",
          "description": "Path of a GameObject in the hierarchy Sample 'character/hand/finger/particle'. Priority: 2."
        },
        "name": {
          "type": "string",
          "description": "Name of a GameObject in hierarchy. Priority: 3."
        },
        "assetType": {
          "$ref": "#/$defs/System.Type",
          "description": "Type of the asset."
        },
        "assetPath": {
          "type": "string",
          "description": "Path to the asset within the project. Starts with 'Assets/'"
        },
        "assetGuid": {
          "type": "string",
          "description": "Unique identifier for the asset."
        }
      },
      "required": [
        "instanceID"
      ],
      "description": "Find GameObject in opened Prefab or in the active Scene."
    },
    "UnityEngine.EntityId": {
      "type": "string",
      "pattern": "^[0-9]+$"
    },
    "System.Type": {
      "type": "string"
    },
    "AIGD.ComponentRef": {
      "type": "object",
      "properties": {
        "index": {
          "type": "integer",
          "description": "Component 'index' attached to a gameObject. The first index is '0' and that is usually Transform or RectTransform. Priority: 2. Default value is -1."
        },
        "typeName": {
          "type": "string",
          "description": "Component type full name. Sample 'UnityEngine.Transform'. If the gameObject has two components of the same type, the output component is unpredictable. Priority: 3. Default value is null."
        },
        "instanceID": {
          "$ref": "#/$defs/UnityEngine.EntityId",
          "description": "instanceID of the UnityEngine.Object. If this is '0', then it will be used as 'null'."
        }
      },
      "required": [
        "index",
        "instanceID"
      ],
      "description": "Component reference. Used to find a Component at GameObject."
    },
    "com.IvanMurzak.ReflectorNet.Model.SerializedMember": {
      "type": "object",
      "properties": {
        "typeName": {
          "type": "string",
          "description": "Full type name. Eg: 'System.String', 'System.Int32', 'UnityEngine.Vector3', etc."
        },
        "name": {
          "type": "string",
          "description": "Object name."
        },
        "value": {
          "description": "Value of the object, serialized as a non stringified JSON element. Can be null if the value is not set. Can be default value if the value is an empty object or array json."
        },
        "fields": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
            "description": "Nested field value."
          },
          "description": "Fields of the object, serialized as a list of 'SerializedMember'."
        },
        "props": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
            "description": "Nested property value."
          },
          "description": "Properties of the object, serialized as a list of 'SerializedMember'."
        }
      },
      "required": [
        "typeName"
      ],
      "additionalProperties": false
    },
    "com.IvanMurzak.ReflectorNet.Model.SerializedMemberList": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember"
      }
    },
    "com.IvanMurzak.Unity.MCP.ParticleSystem.Editor.GetParticleSystemResponse": {
      "type": "object",
      "properties": {
        "gameObjectRef": {
          "$ref": "#/$defs/AIGD.GameObjectRef",
          "description": "Reference to the GameObject containing the ParticleSystem component."
        },
        "componentRef": {
          "$ref": "#/$defs/AIGD.ComponentRef",
          "description": "Reference to the ParticleSystem component."
        },
        "componentIndex": {
          "type": "integer",
          "description": "Index of the ParticleSystem component in the GameObject's component list."
        },
        "isPlaying": {
          "type": "boolean",
          "description": "Whether the ParticleSystem is currently playing."
        },
        "isPaused": {
          "type": "boolean",
          "description": "Whether the ParticleSystem is currently paused."
        },
        "isEmitting": {
          "type": "boolean",
          "description": "Whether the ParticleSystem is currently emitting."
        },
        "isStopped": {
          "type": "boolean",
          "description": "Whether the ParticleSystem is currently stopped."
        },
        "particleCount": {
          "type": "integer",
          "description": "Current particle count."
        },
        "time": {
          "type": "number",
          "description": "Current simulation time."
        },
        "main": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Main module data."
        },
        "emission": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Emission module data."
        },
        "shape": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Shape module data."
        },
        "velocityOverLifetime": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Velocity over Lifetime module data."
        },
        "limitVelocityOverLifetime": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Limit Velocity over Lifetime module data."
        },
        "inheritVelocity": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Inherit Velocity module data."
        },
        "lifetimeByEmitterSpeed": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Lifetime by Emitter Speed module data."
        },
        "forceOverLifetime": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Force over Lifetime module data."
        },
        "colorOverLifetime": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Color over Lifetime module data."
        },
        "colorBySpeed": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Color by Speed module data."
        },
        "sizeOverLifetime": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Size over Lifetime module data."
        },
        "sizeBySpeed": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Size by Speed module data."
        },
        "rotationOverLifetime": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Rotation over Lifetime module data."
        },
        "rotationBySpeed": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Rotation by Speed module data."
        },
        "externalForces": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "External Forces module data."
        },
        "noise": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Noise module data."
        },
        "collision": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Collision module data."
        },
        "trigger": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Trigger module data."
        },
        "subEmitters": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Sub Emitters module data."
        },
        "textureSheetAnimation": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Texture Sheet Animation module data."
        },
        "lights": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Lights module data."
        },
        "trails": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Trails module data."
        },
        "customData": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Custom Data module data."
        },
        "renderer": {
          "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember",
          "description": "Renderer module data."
        }
      },
      "required": [
        "componentIndex",
        "isPlaying",
        "isPaused",
        "isEmitting",
        "isStopped",
        "particleCount",
        "time"
      ],
      "description": "Response containing ParticleSystem data with requested modules."
    }
  },
  "required": [
    "result"
  ]
}