Troubleshooting and FAQ

Most problems show up in the Output Log under the LogMassProjectiles category. Filter on it first.

Nothing renders

  1. proj.Stats: is active above 0?
    • 0: nothing was spawned. Check that the type asset has a Projectile Ballistics trait (the log says so if not) and that Count is ≥ 1.
    • > 0 but invisible: continue below.
  2. Project Settings → Mass Projectile Niagara → Enable Niagara Visualizer is ticked, and Projectile System is set.
  3. Run proj.ReloadAssets after changing any Niagara slot or asset mid-session.
  4. Is the tracer budget or cull tiny? proj.TracerBudget -1, proj.TracerCull -1.
  5. Are you on a dedicated server? Servers never draw. Test with a client or listen server.

Projectiles pass through walls

  • The wall does not block the projectile's trace channel. In the wall's collision settings, make sure Projectile is Block. Check that the channel exists (Installation, Step 3).
  • The type's Trace Channel is not the channel you set up (common when your project's first custom channel is something else).
  • The wall is too thin for a fast round and its surface lets it penetrate. That is penetration working as intended. Use proj.DebugHits 1 to see Penetration Enter/Exit events. proj.DebugPaths 2 draws the whole path with the speed at each wall.

Everything ricochets / nothing penetrates

The surface row decides this. Check which physical material the hit resolves to (proj.DebugHits 1 prints the surface). If it says Default, your mesh or material has no physical material. On a material instance, the checkbox next to Phys Material must be ticked or the instance falls back to its parent's. See Physical Surfaces.

No damage is applied

  • The Mass Projectile Hit component must be on an actor that exists on the server (the Game Mode is ideal). Its events never fire on clients.
  • You filtered with Is Gameplay Damage Impact, and the hits are Ricochet or Penetration Exit. That is intended.
  • The damaged actor has no Event AnyDamage / Take Damage handling.
  • Base Damage on the type is 0.

Multiplayer: other players don't see my shots

  • You call Spawn Projectiles on a client. It spawns locally only. Use the Mass Projectile Fire component (Tutorial 8).
  • The component is on an actor the client does not own (a weapon actor without the owning connection). Put it on the pawn.

Multiplayer: my client fires nothing at all

The type is not in Replicated Types. The log warns once: add the type to Project Settings → Networking → Replicated Types.

Multiplayer: client disconnects while firing

ServerFire validation failed … connection will be closed: pellets × rounds in one call exceeded Max Net Projectiles Per Fire Event. Raise the setting or lower Pellets Per Shot / Max Rounds This Frame.

"ServerFire dropped (rate limit / muzzle … cm from the server's owner location)"

The server rejected the shot, and it exists only on the firing client. Raise Max Net Fire Events Per Second Per Player or Max Net Fire Origin Distance Cm (for example, for vehicles with long barrels or fast pawns).

No decals

  • Hit farther than Decal Cull Distance (100 m by default) from the viewer.
  • Holes vanish as the camera moves away: lower Decal Fade Screen Size (0 = never fade by size).
  • The surface row has Spawn Decals off (water).
  • Max Live Decals or Max Decals Per Frame is reached during heavy fire.
  • Ricochets only leave a scuff if the type's Surface FX row has a Ricochet Decal.

No sounds

  • proj.FlybySounds 1, proj.ImpactSounds 1.
  • The type's Flyby Sound / Surface FX sounds are set, and Flyby Min Speed is below the round's speed.
  • Impact sounds only play within Impact Sound Cull Distance and budget.

First shot of a type hitches

The type is registered on first use (template build and asset loads). Add it to Replicated Types (preloaded at level load), or call Register Type Config on BeginPlay. The Fire component does this automatically for its assigned type.

Particles appear at the world origin

A custom or converted Niagara system reads positions incorrectly. See Visuals and Niagara → Authoring rules.

The editor warns that Mass Gameplay is experimental

This is expected. The plugin depends on Epic's Mass Gameplay plugin, which Epic marks experimental. It ships in every supported engine version.

FAQ

Can I use it with GAS? Yes. In your hit handler, apply a Gameplay Effect instead of Apply Damage (for example, Apply Gameplay Effect to Target on the hit actor's Ability System Component).

Can projectiles home or change direction after firing? No. Flight is ballistic (gravity, drag, wind), and that is what makes multiplayer deterministic and cheap. Use an actor for guided missiles.

Does it work with World Partition / level streaming? Yes. Projectiles live in the world's Mass entity manager and trace whatever collision is loaded.

Can I have different Niagara systems per type? The tracer system is shared. Types differ by colour, size, mesh and smoke material. See Visuals and Niagara.

Is there a C++ requirement? No. Everything in these docs can be done in Blueprint. C++ is optional.

Does it support the Projectile Holes add-on? Projectile Holes is a separate optional plugin and is not covered here. The fields marked "Projectile Holes add-on" in these docs have no effect without it.

Still stuck?

Contact support at darkmatestudio.vercel.app/support with your engine version, whether the plugin is installed in the engine or the project, and the LogMassProjectiles lines from your log.

Need help? Contact support.