Milestone 3 gives players the first thing every strategy game needs before anything else: the ability to point at your own units and say these are the ones I mean. It’s a quiet milestone compared to spawning or combat, but almost nothing else in an RTS can be built until selection works reliably.
Click, drag, and modifiers
The milestone adds the standard vocabulary strategy players expect: clicking a unit selects it, clicking empty ground clears the selection, and dragging a box across the battlefield selects everything friendly caught inside it. Holding Shift switches into additive mode — clicking an already-selected unit removes it from the group instead of starting over, and box-dragging adds to the current selection rather than replacing it. None of this touches enemy units; only units belonging to the local player can ever be selected, so ownership filtering runs on every click and every box query.
One small but telling detail came out of manually testing the feature rather than just running automated tests: the threshold that decides whether a mouse movement counts as a “click” or a “drag” was originally set very small (6 pixels), and ordinary hand tremor during a normal click kept misfiring as an accidental drag. It was widened to 12 pixels after that observation — still a placeholder value, not final tuned feel, but a concrete example of why manual playtesting is treated as part of the test suite rather than a formality after the code compiles.
Keeping selection out of the simulation
Architecturally, the more important part of this milestone is what it deliberately avoids touching. Project Nightfall separates its authoritative match simulation from the Unity-side presentation layer, and selection is implemented entirely on the presentation side — it only reads which units are on screen and who owns them, and stores the selected set as local UI state. Selecting, deselecting, or box-dragging units never changes a unit’s health, position, or ownership record in the underlying simulation. That boundary is verified directly: a test spawns units, exercises replace/add/toggle/clear operations on the selection, and confirms the simulation’s unit records come out unchanged.
A small test scene was added alongside the code — two clusters of placeholder units, tinted by owning player, that a developer can load and click or drag over to see selection behave in practice rather than just in a test runner.
What’s next
Selected units currently have no way to do anything — that’s intentionally out of scope here. This milestone only establishes who’s selected and exposes that set for a future layer to act on; move orders, control groups, and command handling belong to later work.