[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79QJGAFP9NPZZJS233DDV01":3,"skill-same:01M79QJGAFP9NPZZJS233DDV01":45},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":14,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M79QJGAFP9NPZZJS233DDV01","unreal-niagara",null,"Create and control VFX in Unreal Engine 5 with Niagara: systems and emitters, modules and the spawn\u002Fupdate stages, exposed User parameters, and spawning or driving effects from Blueprints or C++. Use when building particle effects, NS_\u002FNE_ assets, spawning a Niagara system at runtime, setting User parameters, or when the user mentions Niagara, VFX, or a particle system in Unreal.","JunMystery\u002FAgent-Guidance","JunMystery","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F161468934?v=4","01M79MTMV8F0BY8NK1A92RA8A0","Jun","01M79MTMWCFBKPHN5B25E6V20B",0,"MIT","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Funreal-niagara\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: unreal-niagara\ndescription: >\n  Create and control VFX in Unreal Engine 5 with Niagara: systems and emitters, modules and\n  the spawn\u002Fupdate stages, exposed User parameters, and spawning or driving effects from\n  Blueprints or C++. Use when building particle effects, NS_\u002FNE_ assets, spawning a Niagara\n  system at runtime, setting User parameters, or when the user mentions Niagara, VFX, or a\n  particle system in Unreal.\n---\n\n# Unreal Niagara VFX\n\nBuild and control real-time visual effects in UE5 with Niagara: understand the\nSystem\u002FEmitter\u002FModule hierarchy, expose parameters you can drive from gameplay, and spawn\neffects at runtime. Targets **UE 5.8**. (Niagara replaces the legacy Cascade system.)\n\n## When to use\n\n- Use when creating a Niagara System (`NS_`) and Emitters (`NE_`), wiring modules in the\n  spawn\u002Fupdate stages, exposing **User** parameters to gameplay, or spawning\u002Fdriving an effect\n  (impact, muzzle flash, fire, magic) from Blueprint or C++.\n- Use when the project has Niagara `NS_`\u002F`NE_` assets or references `UNiagaraComponent`.\n\n**When *not* to use:** material\u002Fshader authoring (the look of a surface, not particles) is a\nseparate topic; `shader-programming` covers cross-engine shader concepts. Audio for the effect\n→ `audio-design`.\n\n## Core workflow\n\n1. **Understand the hierarchy.** A **Niagara System** (`NS_`) is the effect you place\u002Fspawn; it\n   contains one or more **Emitters** (`NE_`, often emitter *templates*). Each emitter runs in\n   stages: **Emitter Spawn\u002FUpdate**, **Particle Spawn\u002FUpdate**, optional **Event Handler**, and\n   **Render**.\n2. **Build behaviour from Modules**, which execute top-to-bottom in each stage (Spawn Rate,\n   Add Velocity, Gravity Force, Color over Life, etc.). Order matters — a later module reads the\n   values earlier ones wrote.\n3. **Know the parameter namespaces:** `System`, `Emitter`, `Particle`, and **`User`**. Only\n   **User-namespace** parameters are exposed to and settable from Blueprint\u002FC++; the others are\n   internal to the simulation.\n4. **Spawn at runtime** with `UNiagaraFunctionLibrary::SpawnSystemAtLocation` (world position)\n   or `SpawnSystemAttached` (follows a component\u002Fsocket), which return a `UNiagaraComponent`.\n5. **Drive the effect** by setting its User parameters on the returned component (color, spawn\n   rate, a target position) and `Activate`\u002F`Deactivate` it.\n6. **Verify** in the Niagara editor preview and in-level; check bounds (especially GPU\n   emitters), and confirm the effect culls\u002Fdestroys correctly.\n\n## Patterns\n\n### 1. Spawn a one-shot effect at a world location (C++)\n\n```cpp\n#include \"NiagaraFunctionLibrary.h\"\n#include \"NiagaraComponent.h\"\n\n\u002F\u002F ImpactSystem is a UPROPERTY(EditAnywhere) TObjectPtr\u003CUNiagaraSystem>.\nvoid AProjectile::SpawnImpact(const FVector& Location, const FRotator& Rotation)\n{\n    UNiagaraComponent* FX = UNiagaraFunctionLibrary::SpawnSystemAtLocation(\n        GetWorld(), ImpactSystem, Location, Rotation);\n    \u002F\u002F FX auto-destroys when finished for a one-shot (system marked non-looping).\n}\n```\n\n### 2. Spawn attached to a socket (muzzle flash that follows the gun)\n\n```cpp\nUNiagaraComponent* Muzzle = UNiagaraFunctionLibrary::SpawnSystemAttached(\n    MuzzleSystem, WeaponMesh, FName(\"MuzzleSocket\"),\n    FVector::ZeroVector, FRotator::ZeroRotator,\n    EAttachLocation::SnapToTarget, \u002F*bAutoDestroy*\u002F true);\n```\n\n### 3. Drive an exposed User parameter at runtime\n\n```cpp\n\u002F\u002F Only User-namespace parameters can be set from gameplay. Names match the User parameter.\nif (UNiagaraComponent* Fire = UNiagaraFunctionLibrary::SpawnSystemAttached(\n        FireSystem, RootComponent, NAME_None, FVector::ZeroVector, FRotator::ZeroRotator,\n        EAttachLocation::KeepRelativeOffset, \u002F*bAutoDestroy*\u002F false))\n{\n    Fire->SetVariableFloat(FName(\"SpawnRate\"), 250.f);                 \u002F\u002F User.SpawnRate\n    Fire->SetVariableLinearColor(FName(\"FireColor\"), FLinearColor::Red);\n}\n```\n\n### 4. Blueprint equivalent (node flow)\n\n```text\nSpawn System at Location (System = NS_Impact, Location, Rotation)  -> returns Niagara Component\nOn the returned component:\n  Set Niagara Variable (Float)  Name=\"SpawnRate\"  Value=250\n  Set Niagara Variable (LinearColor)  Name=\"FireColor\"  Value=Red\n```\n\n## Pitfalls\n\n- **Trying to set a System\u002FEmitter\u002FParticle parameter from gameplay** — it won't take. Expose\n  it in the **User** namespace; only User parameters are settable via the component.\n- **Using Cascade tutorials** — Cascade is deprecated and no longer developed. Niagara is the\n  current system; the emitter\u002Fmodule workflow differs. For existing Cascade assets, the\n  **Cascade To Niagara Converter** plugin gives a starting point to port from.\n- **Crash on the spawned component** — `SpawnSystemAtLocation`\u002F`SpawnSystemAttached` can return\n  `nullptr` (no system asset, or the effect was culled before spawning by its scalability\n  settings). Null-check the result before setting parameters. Both functions are marked unsafe\n  during actor construction, so spawn from `BeginPlay` or later, not the Construction Script.\n- **Effect disappears or doesn't cull right** — fixed\u002Fincorrect bounds, especially for **GPU\n  Compute** emitters which need explicit Fixed Bounds. Set bounds on the emitter\u002Fsystem.\n- **Looping effect never stops** — spawned with `bAutoDestroy = false` and never\n  `Deactivate()`d; manage the returned component's lifetime, or mark the system non-looping for\n  one-shots.\n- **GPU sim can't drive gameplay** — GPU particle data isn't readily read back to the CPU;\n  collision\u002Fevents that gameplay must react to should use CPU emitters (or Niagara → gameplay\n  via the data interface), not GPU.\n- **Module order bugs** — a Force\u002FVelocity module placed before the one that initializes the\n  value reads zero. Mind the top-to-bottom stack order.\n\n## References\n\n- Primary docs: \"Overview of Niagara Effects\"\n  (`https:\u002F\u002Fdev.epicgames.com\u002Fdocumentation\u002Fen-us\u002Funreal-engine\u002Foverview-of-niagara-effects-for-unreal-engine`)\n  and the `UNiagaraFunctionLibrary` \u002F `UNiagaraComponent` API. Add the `Niagara` module to\n  `*.Build.cs` for C++ access.\n\n## Related skills\n\n- `shader-programming` — material\u002Fshader concepts for particle materials.\n- `unreal-cpp-gameplay` — spawning effects from gameplay code and module setup.\n- `unreal-blueprints` — triggering effects from visual scripts.\n","# Unreal Niagara VFX\n\nBuild and control real-time visual effects in UE5 with Niagara: understand the\nSystem\u002FEmitter\u002FModule hierarchy, expose parameters you can drive from gameplay, and spawn\neffects at runtime. Targets **UE 5.8**. (Niagara replaces the legacy Cascade system.)\n\n## When to use\n\n- Use when creating a Niagara System (`NS_`) and Emitters (`NE_`), wiring modules in the\n  spawn\u002Fupdate stages, exposing **User** parameters to gameplay, or spawning\u002Fdriving an effect\n  (impact, muzzle flash, fire, magic) from Blueprint or C++.\n- Use when the project has Niagara `NS_`\u002F`NE_` assets or references `UNiagaraComponent`.\n\n**When *not* to use:** material\u002Fshader authoring (the look of a surface, not particles) is a\nseparate topic; `shader-programming` covers cross-engine shader concepts. Audio for the effect\n→ `audio-design`.\n\n## Core workflow\n\n1. **Understand the hierarchy.** A **Niagara System** (`NS_`) is the effect you place\u002Fspawn; it\n   contains one or more **Emitters** (`NE_`, often emitter *templates*). Each emitter runs in\n   stages: **Emitter Spawn\u002FUpdate**, **Particle Spawn\u002FUpdate**, optional **Event Handler**, and\n   **Render**.\n2. **Build behaviour from Modules**, which execute top-to-bottom in each stage (Spawn Rate,\n   Add Velocity, Gravity Force, Color over Life, etc.). Order matters — a later module reads the\n   values earlier ones wrote.\n3. **Know the parameter namespaces:** `System`, `Emitter`, `Particle`, and **`User`**. Only\n   **User-namespace** parameters are exposed to and settable from Blueprint\u002FC++; the others are\n   internal to the simulation.\n4. **Spawn at runtime** with `UNiagaraFunctionLibrary::SpawnSystemAtLocation` (world position)\n   or `SpawnSystemAttached` (follows a component\u002Fsocket), which return a `UNiagaraComponent`.\n5. **Drive the effect** by setting its User parameters on the returned component (color, spawn\n   rate, a target position) and `Activate`\u002F`Deactivate` it.\n6. **Verify** in the Niagara editor preview and in-level; check bounds (especially GPU\n   emitters), and confirm the effect culls\u002Fdestroys correctly.\n\n## Patterns\n\n### 1. Spawn a one-shot effect at a world location (C++)\n\n```cpp\n#include \"NiagaraFunctionLibrary.h\"\n#include \"NiagaraComponent.h\"\n\n\u002F\u002F ImpactSystem is a UPROPERTY(EditAnywhere) TObjectPtr\u003CUNiagaraSystem>.\nvoid AProjectile::SpawnImpact(const FVector& Location, const FRotator& Rotation)\n{\n    UNiagaraComponent* FX = UNiagaraFunctionLibrary::SpawnSystemAtLocation(\n        GetWorld(), ImpactSystem, Location, Rotation);\n    \u002F\u002F FX auto-destroys when finished for a one-shot (system marked non-looping).\n}\n```\n\n### 2. Spawn attached to a socket (muzzle flash that follows the gun)\n\n```cpp\nUNiagaraComponent* Muzzle = UNiagaraFunctionLibrary::SpawnSystemAttached(\n    MuzzleSystem, WeaponMesh, FName(\"MuzzleSocket\"),\n    FVector::ZeroVector, FRotator::ZeroRotator,\n    EAttachLocation::SnapToTarget, \u002F*bAutoDestroy*\u002F true);\n```\n\n### 3. Drive an exposed User parameter at runtime\n\n```cpp\n\u002F\u002F Only User-namespace parameters can be set from gameplay. Names match the User parameter.\nif (UNiagaraComponent* Fire = UNiagaraFunctionLibrary::SpawnSystemAttached(\n        FireSystem, RootComponent, NAME_None, FVector::ZeroVector, FRotator::ZeroRotator,\n        EAttachLocation::KeepRelativeOffset, \u002F*bAutoDestroy*\u002F false))\n{\n    Fire->SetVariableFloat(FName(\"SpawnRate\"), 250.f);                 \u002F\u002F User.SpawnRate\n    Fire->SetVariableLinearColor(FName(\"FireColor\"), FLinearColor::Red);\n}\n```\n\n### 4. Blueprint equivalent (node flow)\n\n```text\nSpawn System at Location (System = NS_Impact, Location, Rotation)  -> returns Niagara Component\nOn the returned component:\n  Set Niagara Variable (Float)  Name=\"SpawnRate\"  Value=250\n  Set Niagara Variable (LinearColor)  Name=\"FireColor\"  Value=Red\n```\n\n## Pitfalls\n\n- **Trying to set a System\u002FEmitter\u002FParticle parameter from gameplay** — it won't take. Expose\n  it in the **User** namespace; only User parameters are settable via the component.\n- **Using Cascade tutorials** — Cascade is deprecated and no longer developed. Niagara is the\n  current system; the emitter\u002Fmodule workflow differs. For existing Cascade assets, the\n  **Cascade To Niagara Converter** plugin gives a starting point to port from.\n- **Crash on the spawned component** — `SpawnSystemAtLocation`\u002F`SpawnSystemAttached` can return\n  `nullptr` (no system asset, or the effect was culled before spawning by its scalability\n  settings). Null-check the result before setting parameters. Both functions are marked unsafe\n  during actor construction, so spawn from `BeginPlay` or later, not the Construction Script.\n- **Effect disappears or doesn't cull right** — fixed\u002Fincorrect bounds, especially for **GPU\n  Compute** emitters which need explicit Fixed Bounds. Set bounds on the emitter\u002Fsystem.\n- **Looping effect never stops** — spawned with `bAutoDestroy = false` and never\n  `Deactivate()`d; manage the returned component's lifetime, or mark the system non-looping for\n  one-shots.\n- **GPU sim can't drive gameplay** — GPU particle data isn't readily read back to the CPU;\n  collision\u002Fevents that gameplay must react to should use CPU emitters (or Niagara → gameplay\n  via the data interface), not GPU.\n- **Module order bugs** — a Force\u002FVelocity module placed before the one that initializes the\n  value reads zero. Mind the top-to-bottom stack order.\n\n## References\n\n- Primary docs: \"Overview of Niagara Effects\"\n  (`https:\u002F\u002Fdev.epicgames.com\u002Fdocumentation\u002Fen-us\u002Funreal-engine\u002Foverview-of-niagara-effects-for-unreal-engine`)\n  and the `UNiagaraFunctionLibrary` \u002F `UNiagaraComponent` API. Add the `Niagara` module to\n  `*.Build.cs` for C++ access.\n\n## Related skills\n\n- `shader-programming` — material\u002Fshader concepts for particle materials.\n- `unreal-cpp-gameplay` — spawning effects from gameplay code and module setup.\n- `unreal-blueprints` — triggering effects from visual scripts.\n",{"name":5,"description":7},"main","5d0a87185c0e172c3901e2a6e5916b6d544b8b94","skills\u002Funreal-niagara","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance","https:\u002F\u002Fgithub.com\u002FJunMystery","AI is the typist, I am the architect. Building efficient, secure, and user-centric products through disciplined AI prompt engineering.","2026-11-13 17:41:25",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add JunMystery\u002FAgent-Guidance --skill unreal-niagara",{"tool":37,"command":38},"bunx","bunx skills add JunMystery\u002FAgent-Guidance --skill unreal-niagara",{"tool":40,"command":41},"pnpm","pnpm dlx skills add JunMystery\u002FAgent-Guidance --skill unreal-niagara","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Funreal-niagara\u002FSKILL.md",true,[],[46,52,58,64,70,76],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":51,"publishedAt":19},"01M79QR1E309VJ6CTQKB32AWWA","zero-trust-architecture-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fzero-trust-architecture-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":53,"name":54,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":57,"publishedAt":19},"01M79QQV7GHYR02DYGN41S23WN","xss-filter-evasion-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxss-filter-evasion-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":59,"name":60,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M79QQNSN7YB8XB61FFSCS3WH","xs-leaks-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxs-leaks-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":19},"01M79QQHZZJKFDY9132G5A65C2","xpath-injection-prevention-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxpath-injection-prevention-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":19},"01M79QQB9ZSD3DJG8658EHQXR1","xml-security-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxml-security-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M79QQ60WKV7PFMXWT9CW8PM6","xml-external-entity-prevention-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxml-external-entity-prevention-cheat-sheet\u002FSKILL.md",[],[]]