ai-behavior-trees-util…
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators) and a Utility AI system…
Create and control VFX in Unreal Engine 5 with Niagara: systems and emitters, modules and the spawn/update stages, exposed User parameters, and spawning or driving effects from Blueprints or C++. Use when building particle effects, NS_/NE_ assets, spawning a Niagara system at
$ npx -y skills add gamedev-skills/awesome-gamedev-agent-skills --skill unreal-niagara --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/unreal-niagaraContext preview
The summary Claude sees to decide when to auto-load this skill.
Create and control VFX in Unreal Engine 5 with Niagara: systems and emitters, modules and the spawn/update stages, exposed User parameters, and spawning or driving effects from Blueprints or C++. Use when building particle effects, NS_/NE_ assets, spawning a Niagara system at
name: unreal-niagara description: > Create and control VFX in Unreal Engine 5 with Niagara: systems and emitters, modules and the spawn/update stages, exposed User parameters, and spawning or driving effects from Blueprints or C++. Use when building particle effects, NS_/NE_ assets, spawning a Niagara system at runtime, setting User parameters, or when the user mentions Niagara, VFX, or a particle system in Unreal.
Build and control real-time visual effects in UE5 with Niagara: understand the System/Emitter/Module hierarchy, expose parameters you can drive from gameplay, and spawn effects at runtime. Targets **UE 5.8**. (Niagara replaces the legacy Cascade system.)
spawn/update stages, exposing **User** parameters to gameplay, or spawning/driving an effect (impact, muzzle flash, fire, magic) from Blueprint or C++.
**When *not* to use:** material/shader authoring (the look of a surface, not particles) is a separate topic; `shader-programming` covers cross-engine shader concepts. Audio for the effect → `audio-design`.
1. **Understand the hierarchy.** A **Niagara System** (`NS_`) is the effect you place/spawn; it contains one or more **Emitters** (`NE_`, often emitter *templates*). Each emitter runs in stages: **Emitter Spawn/Update**, **Particle Spawn/Update**, optional **Event Handler**, and **Render**. 2. **Build behaviour from Modules**, which execute top-to-bottom in each stage (Spawn Rate, Add Velocity, Gravity Force, Color over Life, etc.). Order matters — a later module reads the values earlier ones wrote. 3. **Know the parameter namespaces:** `System`, `Emitter`, `Particle`, and **`User`**. Only **User-namespace** parameters are exposed to and settable from Blueprint/C++; the others are internal to the simulation. 4. **Spawn at runtime** with `UNiagaraFunctionLibrary::SpawnSystemAtLocation` (world position) or `SpawnSystemAttached` (follows a component/socket), which return a `UNiagaraComponent`. 5. **Drive the effect** by setting its User parameters on the returned component (color, spawn rate, a target position) and `Activate`/`Deactivate` it. 6. **Verify** in the Niagara editor preview and in-level; check bounds (especially GPU emitters), and confirm the effect culls/destroys correctly.
#include "NiagaraFunctionLibrary.h"
#include "NiagaraComponent.h"
// ImpactSystem is a UPROPERTY(EditAnywhere) TObjectPtr<UNiagaraSystem>.
void AProjectile::SpawnImpact(const FVector& Location, const FRotator& Rotation)
{
UNiagaraComponent* FX = UNiagaraFunctionLibrary::SpawnSystemAtLocation(
GetWorld(), ImpactSystem, Location, Rotation);
// FX auto-destroys when finished for a one-shot (system marked non-looping).
}UNiagaraComponent* Muzzle = UNiagaraFunctionLibrary::SpawnSystemAttached(
MuzzleSystem, WeaponMesh, FName("MuzzleSocket"),
FVector::ZeroVector, FRotator::ZeroRotator,
EAttachLocation::SnapToTarget, /*bAutoDestroy*/ true);// Only User-namespace parameters can be set from gameplay. Names match the User parameter.
if (UNiagaraComponent* Fire = UNiagaraFunctionLibrary::SpawnSystemAttached(
FireSystem, RootComponent, NAME_None, FVector::ZeroVector, FRotator::ZeroRotator,
EAttachLocation::KeepRelativeOffset, /*bAutoDestroy*/ false))
{
Fire->SetVariableFloat(FName("SpawnRate"), 250.f); // User.SpawnRate
Fire->SetVariableLinearColor(FName("FireColor"), FLinearColor::Red);
}Spawn System at Location (System = NS_Impact, Location, Rotation) -> returns Niagara Component On the returned component: Set Niagara Variable (Float) Name="SpawnRate" Value=250 Set Niagara Variable (LinearColor) Name="FireColor" Value=Red
it in the **User** namespace; only User parameters are settable via the component.
emitter/module workflow differs.
Compute** emitters which need explicit Fixed Bounds. Set bounds on the emitter/system.
`Deactivate()`d; manage the returned component's lifetime, or mark the system non-looping for one-shots.
collision/events that gameplay must react to should use CPU emitters (or Niagara → gameplay via the data interface), not GPU.
value reads zero. Mind the top-to-bottom stack order.
(`https://dev.epicgames.com/documentation/en-us/unreal-engine/overview-of-niagara-effects-for-unreal-engine`) and the `UNiagaraFunctionLibrary` / `UNiagaraComponent` API. Add the `Niagara` module to `*.Build.cs` for C++ access.
<img src="docs/assets/banner.png" width="820" alt="awesome-gamedev-agent-skills — game-dev skills for AI coding agents.
Repo: gamedev-skills/awesome-gamedev-agent-skills
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators) and a Utility AI system…
Implement game audio practice — bus/mixer architecture and gain in decibels, ducking (sidechain), adaptive/dynamic music via layering and re-sequencing, SFX…
Build game cameras that feel good — 2D follow with a deadzone, look-ahead, smoothing, and level-bounds clamping; 3D third-person orbit with collision and…
Plan, generate, source, normalize, and validate cohesive visual game assets. Use for art direction, style bibles, sprites, tilesets, backgrounds, UI art,…
Build branching dialogue and narrative — a node/choice graph with conditions, variables, and localization hooks — and choose between authoring tools Ink and…
Design NPC and enemy decision-making with finite state machines, behavior trees, steering behaviors, and A* pathfinding — engine-neutral algorithms that pair…