--- name: particle-system-get description: 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. metadata: 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 ```bash 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: > ```bash > unity-mcp-cli run-tool particle-system-get --input-file args.json > ``` > > Or pipe via stdin (recommended): > ```bash > 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 ```json { "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 ```json { "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" ] } ```