Quick Wave Spawner Pro
Krykftn | Advanced Editor Tools & Systems
$27.49
(no ratings)
Jump AssetStore
A deterministic wave director for tower-defense, survivor and horde games: an editor timeline that plots every spawn before Play, and a pooled runtime that provably executes the same plan.Works in any render pipeline. The package is pure C# gameplay and editor tooling: it spawns your prefabs with your project's own materials and shaders, and renders nothing itself. Built-in, URP and HDRP behave identically. Editor code (the timeline window and checks) is in a separate editor-only assembly and does not ship in builds.Every wave spawner can spawn things. The question is whether you can see the encounter before you press Play - and whether what you saw is what actually happens.This one plots it. Open the Wave Timeline window, pick a schedule, and every spawn of the whole encounter is drawn on one strip: what spawns, when, from which entry. The same code computes that strip and drives the game, and the package's tests step the runtime against the plan spawn for spawn to prove they match. It is a preview in the literal sense.AUTHOR WAVES AS ASSETSA WaveSchedule is a ScriptableObject: waves of entries, each entry saying which prefab, how many, and how they are spread - Burst (all at once), Stream (evenly over a duration) or Stagger (evenly with seeded jitter). Waves advance by one of three rules:• AfterDelay - fully timed, fully plottable• WhenCleared - the next wave waits until everything is dead; player-paced pressure• ClearedOrDelay - whichever comes first; reward fast clears without letting slow ones stallDETERMINISTIC, PROVABLYThe same seed always produces the same plan, on every platform - randomness comes from an explicit generator, not System.Random, whose algorithm is not guaranteed stable. Waves are seeded independently, so editing wave three never changes wave one's plan. Set a different seed per run when you want variety.DRIFT-FREE TIMINGScheduled transitions anchor to their scheduled moments, not to the frame that noticed them. Without that rule, each wave boundary adds up to a frame of lateness and the error accumulates - measured at 216 ms of drift by the second wave before the rule existed. With it: across deliberately ugly random frame times, no spawn ever fires early and none is later than one frame.ONE CALL TO INTEGRATEWhen something dies in your game, call runner.Despawn(instance). That single call returns the object to its pool and lets clear-based waves advance. Everything else - pooling, timing, spawn points, events - is the runner's job.POOLED, COUNTEDSpawned objects come from per-prefab pools with prewarm. The counters are public, because "it pools" is a claim: in the sample encounter, 43 spawns are served by 24 objects, all created up front, with nothing instantiated after.IT NAMES YOUR MISTAKESThe timeline window checks the schedule and the runner, and says what it finds in words: a WhenCleared wave that spawns nothing and would therefore wait forever, a prefab index the runner does not have, a stream over zero seconds, a spawn group with no usable points. A correct setup produces no findings.THE SAMPLEFour waves, three enemy types, all three advance rules, a live HUD counting alive / spawned / objects-ever-created, click-to-kill, and an auto-killer so the encounter also completes unattended. Rebuild it any time from the menu.MEASUREDThe numbers here come from the automated checks that ship with the package, run on Unity 2022.3.62f2: runtime-versus-plan parity across random 5-125 ms frames with worst lateness 115 ms and zero accumulation; a hand-computed stream of five over eight seconds landing exactly on 0, 2, 4, 6, 8; 43 spawns from 24 pooled objects. Each suite was verified by deliberately breaking the code and confirming the tests caught it.REQUIREMENTS• Unity 2022.3 LTS or newer• Pure C#, no dependencies, no accounts, any render pipelineLIMITSSpawn counts and timings are fixed per schedule; difficulty scaling is yours to apply by choosing a schedule or editing counts before Play. WhenCleared relies on your Despawn calls - if nothing reports deaths, the wave waits by design, and the inspection names the one case where that is certain. One runner runs one schedule at a time; use several runners for overlapping encounters.Features:• WaveSchedule assets: waves, entries, Burst / Stream / Stagger patterns, three advance rules• Wave Timeline window: every spawn of the encounter plotted before Play, plus a per-wave table• Setup checks that name specific mistakes, including the wave that would wait forever• Deterministic: same seed, same plan, on every platform; waves seeded independently• Drift-free runtime: scheduled transitions anchor to scheduled moments, so lateness never accumulates• Per-prefab pooling with prewarm and public created/reused counters• Spawn point groups with round-robin and random assignment• One-call integration: Despawn(instance) returns the object to its pool and advances clear-based waves• UnityEvents for wave started, finished spawning, all finished, and spawned• Unity-free core (WaveRunnerCore) steppable with fake time for your own testsMeasured on Unity 2022.3.62f2:• Runtime vs plan across random 5-125 ms frames: every spawn in order, none early, worst lateness 115 ms - under one frame, zero accumulation• Sample encounter: 43 spawns served by 24 pooled objects, none instantiated after prewarm• Import on a bare project: 28 files, zero compile errorsSupported OS: all platforms Unity builds to; the package is pure C#Technical notes:• Namespaced under Krykftn.QuickWaveSpawnerPro; runtime, editor and demo assemblies separated• No dependencies, no accounts, no network access; works in any render pipeline• Unity 2022.3 LTS or newerDocumentation: included as README.mdAI assistance was used while making this package, and here is exactly where.Code: an AI coding assistant helped write and review the C#. The claim that matters here was checked rather than assumed: the runtime was run against random 5-125 ms frames and compared to the plan the editor timeline draws, and every spawn arrived in order, none early, worst lateness 115 ms - under one frame, with zero accumulation. The core is Unity-free and steppable with fake time, which is what makes that check possible.Text: the README, the documentation and this store description were drafted with AI assistance and then edited by hand for accuracy.Images: no image content is AI generated. Every screenshot is a real capture of the timeline window and the sample encounter in the Unity Editor. AI was used only to place those real screenshots on a background and to write the caption text around them.Nothing in the package generates content at runtime. It reads a wave schedule you author and spawns from pools you prewarm; there are no dependencies, no accounts and no network access.

