FPS Controller with Animated Y-Bots & miniaudio 3D Sound (Box3D, Recast, ozz & SDL3) FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, ozz и SDL3)
A complete multiplatform starter guide featuring a First-Person capsule controller, animated follower Y-Bot robots with 4-layer blend trees, Box3D 3D physics, Detour Crowd pathfinding, BehaviorTree.CPP logic, miniaudio 3D positional footstep sounds and 2D background music, with dual mobile touch controls across Windows, Ubuntu, Android, and WebAssembly (Emscripten). Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D, навигацией толпы Detour Crowd, логикой BehaviorTree.CPP, 3D-позиционированным звуком шагов miniaudio и 2D-фоновой музыкой, а также мобильным сенсорным управлением для Windows, Ubuntu, Android и WebAssembly (Emscripten).
miniaudio & stb_vorbis Audio Integration Интеграция аудио через miniaudio и stb_vorbis
This project leverages miniaudio with stb_vorbis for high-performance cross-platform audio: 3D spatialized footstep audio emitted from the player's camera position and each Y-Bot robot in 3D world space (with realistic distance attenuation), paired with a seamless looping 2D background music track streamed across all platforms. В этом проекте используются библиотеки miniaudio и stb_vorbis для высокопроизводительного мультиплатформенного звука: 3D-пространственный звук шагов, исходящий от позиции камеры игрока и каждого робота Y-Bot в мировых координатах (с реалистичным затуханием от расстояния), а также зацикленный 2D-трек фоновой музыки на всех платформах.
Prerequisites: Required Libraries Setup Предварительные требования: Установка библиотек
Before proceeding, ensure you have built and installed the necessary static and shared libraries for your target platform: Перед началом работы убедитесь, что вы собрали и установили необходимые библиотеки для вашей целевой платформы:
Windows (MinGW) Windows (MinGW)
Ubuntu (GCC) Ubuntu (GCC)
Android (NDK) Android (NDK)
WebAssembly WebAssembly
Step 1: Download Repository Archive Шаг 1: Скачивание архива репозитория
Download the complete source code containing 3D skeletal assets, audio files (footsteps & music), shaders, and cross-platform build scripts: Скачайте полный архив исходного кода, содержащий 3D-модели скелетной анимации, аудиофайлы (шаги и музыка), шейдеры и мультиплатформенные скрипты сборки:
Download Repository (.zip) Скачать репозиторий (.zip) View on GitHub Открыть на GitHub
Step 2: Project Architecture Шаг 2: Архитектура проекта
fps-miniaudio-ybots-box3d-sdl3/
├── assets/
│ ├── audio/ # Sound effects & music tracks
│ │ ├── footstep.wav # 3D spatialized footstep sound
│ │ └── music.ogg # 2D looping background music (via stb_vorbis)
│ ├── fonts/LiberationSans-Regular.ttf
│ ├── models/
│ │ ├── cube/
│ │ └── y-bot/ # Skinned mesh & ozz binary animation tracks
│ │ ├── skeleton.ozz
│ │ ├── animation-idle-crouching.ozz
│ │ ├── animation-walk-crouching.ozz
│ │ ├── animation-turn-rifle.ozz
│ │ ├── y-bot.glb
│ │ └── y-bot.webp
│ └── shaders/ # Skinning, line & texture shaders (GLSL & GLES)
├── src/
│ ├── app.h # Central engine state, cglm matrices & touch state
│ ├── audio_manager.h / .cpp # miniaudio engine: 3D spatial sound & 2D music
│ ├── enemy_ai.h / .cpp # Recast NavMesh crowd & BehaviorTree 4.x
│ ├── fps_controller.h / .cpp# First-person WASD & multi-touch shooter controls
│ ├── anim_player.h # ozz 4-layer animation blending runtime
│ ├── model_loader.h # cgltf skinned character & inverse bind matrices
│ ├── msaa_fbo.h # 4x Multisample anti-aliasing render pass
│ ├── physics_debug.h / .cpp # Box3D debug callbacks
│ ├── physics_setup.h # Rigid body capsule & ground definitions
│ ├── ui_overlay.h # ImGui virtual joystick, jump button & crosshair
│ └── main.cpp # SDL3 multiplatform loop & audio tick updates
├── CMakeLists.txt
├── build-exe.bat / run-exe.bat # Windows (MinGW)
├── build-bin.sh / run-bin.sh # Ubuntu (GCC / Ninja)
├── build-apk.bat / install-apk.bat # Android (NDK arm64-v8a)
└── build-wasm.bat / run-wasm.bat # WebAssembly (Emscripten)
Step 3: Setup & Build by Platform Шаг 3: Настройка и сборка по платформам
Extract the downloaded archive to C:\projects\fps-miniaudio-ybots-box3d-sdl3. Run the preconfigured batch scripts in Command Prompt:
Распакуйте архив в C:\projects\fps-miniaudio-ybots-box3d-sdl3. Запустите готовые пакетные файлы в командной строке:
cd C:\projects\fps-miniaudio-ybots-box3d-sdl3
config-exe.bat
build-exe.bat
run-exe.bat
Note: The executable statically links SDL3, Box3D, Recast, BehaviorTree.CPP, and miniaudio (WASAPI audio backend). The assets directory is automatically copied into the output folder.
Примечание: Исполняемый файл статически линкует SDL3, Box3D, Recast, BehaviorTree.CPP и miniaudio (аудио-бэкенд WASAPI). Директория assets автоматически копируется в папку сборки.
Download and extract the repository in your terminal, make the scripts executable, and build: Скачайте и распакуйте репозиторий в терминале, сделайте скрипты исполняемыми и соберите проект:
mkdir -p ~/projects && cd ~/projects
wget https://github.com/ivan-enzhaev/fps-miniaudio-ybots-box3d-sdl3/archive/refs/heads/main.zip -O fps-miniaudio-ybots-box3d-sdl3.zip
unzip -o fps-miniaudio-ybots-box3d-sdl3.zip
mv fps-miniaudio-ybots-box3d-sdl3-main fps-miniaudio-ybots-box3d-sdl3
cd fps-miniaudio-ybots-box3d-sdl3
chmod +x config-bin.sh build-bin.sh run-bin.sh
./config-bin.sh
./build-bin.sh
./run-bin.sh
miniaudio links with PulseAudio/ALSA and uses -lpthread -lm -ldl on Ubuntu.
miniaudio подключается через PulseAudio/ALSA и использует -lpthread -lm -ldl в Ubuntu.
The Android build produces an arm64-v8a shared library with miniaudio's AAudio backend and packages it into an APK using the SDL3 Android Java wrapper. Sound assets and Ogg music tracks are bundled into the APK:
Сборка для Android компилирует библиотеку .so для arm64-v8a с бэкендом AAudio в miniaudio и упаковывает её в APK. Аудио-ассеты и Ogg-музыка автоматически включаются в APK:
# Configure and compile native arm64-v8a shared libraries & APK
config-apk.bat
build-apk.bat
# Install to connected Android device or emulator via ADB
install-apk.bat
AAudio provides low-latency positional 3D sound on modern Android devices (API 26+).
AAudio обеспечивает сверхнизкую задержку для 3D-звука на устройствах Android (API 26+).
Compile to WebAssembly using the Emscripten SDK (emcmake). miniaudio automatically maps to the browser's Web Audio API. Audio files and assets are packed with --embed-file assets@/assets:
Скомпилируйте проект в WebAssembly с помощью Emscripten SDK (emcmake). miniaudio автоматически транслирует звук в Web Audio API браузера. Аудиофайлы упаковываются через --embed-file assets@/assets:
# Activate Emscripten environment
call C:\emsdk\emsdk_env.bat
# Configure and compile WASM build
config-wasm.bat
build-wasm.bat
# Start local server and open in browser
run-wasm.bat
Note: Modern web browsers suspend audio until the user interacts with the canvas. Clicking the screen immediately resumes miniaudio Web Audio playback!
Примечание: Браузеры блокируют воспроизведение звука до первого клика. Нажатие на экран сразу же разблокирует воспроизведение Web Audio в miniaudio!
Step 4: Controls & Input Methods Шаг 4: Управление и ввод
| Platform / InputПлатформа / Ввод | ControlУправление | ActionДействие |
|---|---|---|
| Desktop & Web | W A S D | Move player & trigger local footstep sound pacingДвижение игрока и воспроизведение звука шагов с шагом по времени |
| Mouse LookДвижение мыши | Rotate camera & update 3D audio listener orientationВращение камеры и обновление ориентации 3D-слушателя | |
| Space | Jump via Box3D impulseПрыжок через импульс Box3D | |
| M | Toggle 2D background music playbackВключение/выключение фоновой 2D-музыки | |
| Esc | Release mouse cursor (click canvas to recapture)Освободить курсор (кликните в экран для возврата) | |
| Android Touch | Left Screen TouchКасание левой части | Virtual joystick for movement (triggers footsteps)Виртуальный джойстик перемещения (воспроизводит шаги) |
| Right Screen SwipeСвайп правой части | Aiming, rotation, and 3D audio listener updateПрицеливание, поворот и обновление 3D-слушателя | |
| JUMP ButtonКнопка JUMP | Dedicated bottom-right button for jumpingКнопка в правом нижнем углу для прыжка | |
| All Platforms | P / UI Checkbox | Toggle Box3D physics shapes & Recast AI debug linesВключение/выключение отладочной графики физики и AI |
Step 5: Visual & Audio Subsystems Legend Шаг 5: Легенда подсистем и визуализации
| Indicator / SubsystemИндикатор / Подсистема | ModuleМодуль | DescriptionОписание |
|---|---|---|
| 🔊 3D Spatial Audio🔊 3D-звук | miniaudio (3D) | Positional footsteps played at robot world coordinates with distance volume falloffПозиционные шаги в мировых координатах роботов с затуханием по дистанции |
| 🎵 2D Music Stream🎵 2D-музыка | stb_vorbis + miniaudio | Continuous non-spatial stereo background music loop decoded from Ogg VorbisНепрерывный стерео-фон Ogg Vorbis без пространственного позиционирования |
| 🔷 Cyan Wireframe🔷 Голубая сетка | Recast Navigation | Walkable NavMesh polygon geometry on the arena floorПроходимые полигоны NavMesh на поверхности арены |
| 🟡 Yellow Lines🟡 Желтые линии | BehaviorTree.CPP | Active chase vectors pointing from enemies to the playerВекторы активного преследования от врагов к игроку |
| ⚪ White Capsules & Boxes⚪ Белые капсулы и боксы | Box3D Physics | Player and enemy rigid body collision capsules and floor boundsКоллизионные капсулы тел игрока, врагов и границы арены |
| 🔴 Crosshair Dot🔴 Точка прицела | Dear ImGui HUD | Central FPS targeting crosshair with dynamic scalingЦентральное перекрестие прицела с масштабированием под DPI |
Support My Work Поддержать проект
If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.
Sberbank (Russia only) Сбербанк (только для РФ)
Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)
USDT TRC20
Support via Cryptocurrency Поддержка криптовалютой