Gatling – Projectile & Ballistics System


Projectile & Ballistics System. Thousands of live projectiles in 2D and 3D, hitscan and travel time in one pipeline, and impact rules authored as assets.


by AnkleBreaker


Price History +

💬 Join the AnkleBreaker Community! 💬

Got a question, feedback, or a feature you'd love to see? Join our Discord - we actively improve our assets based on your input, and it's where we drop our latest announcements and run giveaways.

💥 Every Projectile, In One System 💥

Shooters, action games and physics sandboxes all need the same thing: spawn, simulate and pool projectiles, resolve hits, and present muzzle, impact and explosion FX - usually rebuilt from scratch on every project.

Gatling ships that whole stack as ScriptableObject-authored, damage-agnostic content. You author weapons, projectiles, impact behaviours and surface materials as assets, drop one rig in the scene, and fire - from a component, from three lines of code, or from your own netcode. Everything runs on a central fixed-step simulation with swept, anti-tunnelling collision, so a round never passes through a wall because the frame was long.

It never applies damage. An impact is an event on a bus carrying the physical context - speed, energy, angle, surface, damage multiplier - and your game decides what a hit means. There is no health component to inherit from and no assumption about your gameplay.

And going online later is not a rewrite. This package is networking-agnostic by design: it carries no networking dependency at all, so a solo project never sees a line of networking code - but it does carry the seams a netcode needs. Server-authoritative multiplayer is the separate AnkleBreaker Gatling FishNet module, which drives these exact same assets. It is not included here, and no assembly in this package references FishNet.


🎯 Real Ballistics, Out of the Box 🎯

  • Ballistic zeroing - you configure a hit distance, never an angle. Set a weapon to zero at 50 m and the solver finds the launch angle for you, in 2D or 3D, and it holds at any simulation step rate. Four modes (Absolute, Adjustable, Adaptive, None), plus a high-arc solver for mortars and catapults and a quantised solution cache so it stays cheap. In third person the muzzle sits off to the side of a centred crosshair - the shot still converges on what you aimed at.
  • Hitscan and travel time in one pipeline. The same weapon asset can resolve instantly up close and simulate beyond. Hitscan fast-forwards the real trajectory through the same maths, so a tracer draws the arc the shot flew instead of the straight chord between its ends.
  • Impact behaviours you compose, not code. Stop, Stick, Bounce, Ricochet, Explode, Penetrate - ordered, shareable rule assets, gated by surface layer, impact speed, energy and grazing angle, and falling through to the next rule when one cannot apply. The same round skips off a plate it grazes and drills the plate it meets square, because the gate is the angle and not the prop.
  • Penetration that reads the wall. Surface materials carry an entry threshold, a flat and a per-metre speed loss, a maximum penetrable thickness and an exit floor. Thickness is measured on the collider's own shape, so a round travelling along a beam is not mistaken for a round going through it. AP ammunition becomes a data change - unlimited material types, at zero Unity-layer cost.
  • Wind that bends the shot after it leaves the muzzle. Author it as a preset, a scene component, a Unity WindZone with no integration code to write, or a box or sphere volume for a wind that only exists somewhere. It is a pure function of the simulation clock - no state, no random - so a gust is reproducible, and it runs across the job system: Burst-compiled when Burst is installed, ordinary C# jobs when it is not.
  • 2D and 3D, not 3D with a 2D mode. One SimulationSpace toggle switches the gravity source and the collision backend. Zeroing, penetration, ricochet, wind, tracers, pooling - every feature works in both dimensions, with dedicated 2D side-view and 2D top-down samples.

🧩 Core Building Blocks 🧩

  • ProjectileSimulationManager - one deterministic, fixed-step, data-oriented sim per scene, tunable from 10 to 240 Hz.
  • ScriptableObject content - weapons, projectiles, impact rules and surface materials are assets, shareable and diffable, and the same assets drive solo and networked play.
  • ProjectileEmitter - a no-code component for turrets, traps and AI: set a fire point, fire from UnityEvents or animation events, preview the arc with a Scene View gizmo before you press Play.
  • Static zero-alloc event bus - fire requests in; fired, impact, expired, bounced, penetrated, exploded, stuck, out-of-range and removed out. Every hit reports object, point, normal, velocity and kinetic energy. No singleton to reference.

🚀 Why Gatling? 🚀

  • Damage-agnostic - it reports the physics of every hit and never imposes a damage model, so it drops into any combat system.
  • Three fidelity modes - pure deterministic, hybrid PhysX handover on impact, or full Rigidbody, chosen per projectile.
  • Impact marks that ride targets - decals, stuck arrows and planted bodies follow the platform, vehicle or player they hit, and transfer onto ragdolls and wrecks at their exact world pose.
  • Built to scale - pooled from end to end, with no steady-state allocation. Measured on the shipped stress bench: about 10 800 live simulated projectiles at 60 fps, and about 2 500 once every one of them owns a GameObject - which is exactly what the distance and frustum culling, the far LOD band and the GameObject-free instanced tracer are there for.
  • Profiler-honest - Gatling.Step, Gatling.Visuals and Gatling.Wind markers, plus zeroing-cache hit-rate counters, so a busy frame is attributed rather than guessed at.
  • Headless-ready - Mute Audio, Mute Visuals and Mute Effects run the package with no presentation at all: a dedicated server fires, sweeps and lands the same shots without instantiating a single visual.

🛠 In the Editor 🛠

  • Configuration window - weapons, projectiles and surface materials in one place, with a live trajectory preview. An empty Default Projectile slot creates and assigns a definition in one click.
  • Test Fire - fires the asset you are tuning down a graduated range, in 3D, 2D side view or 2D top down, past a station of the four penetrable materials at that layout's own ballistic scale.
  • Documentation window - 41 pages across four tabs (Get Started, Manual, Scripting, Reference), searchable, with a guided tour and one-click links into the windows, menu items and assets each page describes.
  • Examples window - browse every sample scene and open it.
  • Themed inspectors for every Gatling component and asset, and a dependencies installer that never installs anything without an explicit click.

📦 What Is in the Box 📦

  • 13 sample scenes - three showcase halls (3D, 2D side view, 2D top down), a bullet-hell arena, a staged battlefield, the 3D / 2D / third-person ranges, penetration, thrown objects, traps and turrets, wind, and a stress bench.
  • Pooled native effects and audio - muzzle, impact and explosion slots driving ParticleSystem prefabs (or VFX Graph assets when that package is installed), and fire, flight-loop, impact and explosion audio on pooled sources with a voice budget. Switch them off per definition and drive FMOD or Wwise from the same events instead.
  • Full C# source. No DLLs.

🛠️ We also offer other quality & productivity tools for Maps, Cinematic Cameras, Manager Initialization, Radial Menu and more.