Zero distances
Compensate for bullet drop at a configured range.
A bullet drops as it travels. Zeroing adjusts its initial trajectory so the aim point corresponds approximately to a chosen distance. The scene system stores a list of available zero distances, while each bullet asset caches the angles calculated for that list.
Set Zero Distances to 0, 100, 200, 300, 500 before entering Play mode. Start with zero wind. Place a target at (0, 0, 500) and narrow the camera field of view to inspect the impact. Fire at zero distance 0, then increase it to 500 and compare the vertical hit position.
Add these checks to the tutorial shooter's Update:
if (RSBDemoInput.Pressed(RSBDemoAction.ZeroUp))
SniperAndBallisticsSystem.instance.CycleZeroDistanceUp();
if (RSBDemoInput.Pressed(RSBDemoAction.ZeroDown))
SniperAndBallisticsSystem.instance.CycleZeroDistanceDown();The demo bindings are B and V. Read CurrentZeroDistance or listen for EZeroDistanceChanged to update your UI. The methods stop at the ends of the list; they do not wrap around. In the sample weapon controller, the keys are handled while aiming.
For independent weapons, set BulletShotParameters.ZeroDistance on each shot instead of cycling the global selection. Use a distance prepared by ActivateBullet, 0 for no compensation, or null to capture CurrentZeroDistance. The selected angle is captured at firing. See Multiple shooters.
The Inspector caps entries after the first at 2000; this is an editor limit, not a guarantee of trajectory accuracy or a general limit on real scopes. Choose distances the selected bullet can reach. The trajectory precomputation is a simplified forward calculation, and extreme settings can take a long time to calculate. Test intended ranges in your game.
Zeroing compensates vertical drop, not lateral wind or spin drift. A target at the zero distance can still be missed horizontally. After experimenting, reset the camera FOV to 60 and the cube to (0, 2, 10) for the surface tutorials.

