A 3D USPSA-style practical shooting stage for Android, built with Unreal Engine 5.7 in pure C++ — no external art or audio assets (engine primitive meshes, plus materials and sound effects generated by the scripts in this repo).
A timed course of fire scored like a real USPSA match:
- Paper targets with A / C / D scoring zones — A = 5, C = 3, D = 1 points, best two hits on each count.
- Steel poppers that fall when hit (+5).
- No-shoot targets (white) — −10 penalty per hit.
- Misses — −10 each (a paper without its two hits, or a popper left standing).
Tap START, wait through the random standby delay for the buzzer, then engage the bay. The clock runs from the buzzer to the last required hit; the stage scores itself with a hit factor = points ÷ time and a full A/C/D + penalty breakdown. Tap RUN AGAIN to re-run.
- Tap anywhere to shoot (shots go where you're looking).
- Drag the bottom-left corner to move, bottom-right to look.
- Desktop fallback:
WASD+ mouse, left-click to fire.
Buzzer, gunshot, steel "ding", paper "thwack", and a looping music bed are all synthesized
by gen_audio.py (pure Python, standard library) and imported as SoundWave assets by
import_audio.py. Materials are likewise authored headlessly by make_material.py.
| File | Role |
|---|---|
Source/Shooter3D/ShooterGameMode.* |
Stage manager: buzzer/timer/state, scoring, hit factor, builds the bay |
Source/Shooter3D/ShooterTarget.* |
Paper (A/C/D zones), steel popper, and no-shoot targets |
Source/Shooter3D/ShooterCharacter.* |
First-person pawn, tap-to-shoot, gunshot SFX |
Source/Shooter3D/ShooterProjectile.* |
Projectile + hit reporting |
Source/Shooter3D/ShooterHUD.* |
Slate HUD: time/points, START/RUN-AGAIN, GO! flash, results |
gen_audio.py / import_audio.py / make_material.py |
Asset generators |
Requires UE 5.7 with the Android platform, the Android NDK/SDK, and a JDK. Set
ANDROID_HOME, ANDROID_NDK_ROOT, NDK_ROOT, NDKROOT, JAVA_HOME, then:
UE="/path/to/UE_5.7"
PROJ="$PWD/Shooter3D.uproject"
"$UE/Engine/Build/BatchFiles/Mac/Build.sh" Shooter3DEditor Mac Development -project="$PROJ" -waitmutex
"$UE/Engine/Build/BatchFiles/RunUAT.command" BuildCookRun -project="$PROJ" \
-platform=Android -cookflavor=ASTC -clientconfig=Development \
-build -cook -stage -package -pak -archive -archivedirectory="$PWD/Archive" \
-nodebuginfo -nocompileeditor -utf8outputOutput: Archive/Android_ASTC/Shooter3D-arm64.apk (~130 MB, debug-signed, arm64-v8a,
data packed inside the APK so a plain adb install works).
