FPS Controller with Animated Y-Bots (Box3D, Recast, BT.CPP, ozz-animation & SDL3) FPS контроллер с анимированными Y-Bot (Box3D, Recast, BT.CPP, ozz-animation и 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, and dual mobile touch controls for Windows, Ubuntu, Android, and WebAssembly (Emscripten). Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D, навигацией толпы Detour Crowd, логикой BehaviorTree.CPP и мобильным сенсорным управлением для Windows, Ubuntu, Android и WebAssembly (Emscripten).
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, shaders, and cross-platform build scripts: Скачайте полный архив исходного кода, содержащий 3D-модели скелетной анимации, шейдеры и мультиплатформенные скрипты сборки:
Download Repository (.zip) Скачать репозиторий (.zip) View on GitHub Открыть на GitHub
Step 2: Project Architecture Шаг 2: Архитектура проекта
fps-ybots-follow-box3d-sdl3/
├── assets/
│ ├── 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
│ ├── 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 & GLES/Desktop pipeline
├── 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-ybots-follow-box3d-sdl3. Run the preconfigured batch scripts in Command Prompt:
Распакуйте архив в C:\projects\fps-ybots-follow-box3d-sdl3. Запустите готовые пакетные файлы в командной строке:
cd C:\projects\fps-ybots-follow-box3d-sdl3
config-exe.bat
build-exe.bat
run-exe.bat
Note: The executable statically links SDL3, Box3D, Recast, and BehaviorTree.CPP. The assets directory is automatically copied into the output folder.
Примечание: Исполняемый файл статически линкует SDL3, Box3D, Recast и BehaviorTree.CPP. Директория 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-ybots-follow-box3d-sdl3/archive/refs/heads/main.zip -O fps-ybots-follow-box3d-sdl3.zip
unzip -o fps-ybots-follow-box3d-sdl3.zip
mv fps-ybots-follow-box3d-sdl3-main fps-ybots-follow-box3d-sdl3
cd fps-ybots-follow-box3d-sdl3
chmod +x config-bin.sh build-bin.sh run-bin.sh
./config-bin.sh
./build-bin.sh
./run-bin.sh
The Android build produces an arm64-v8a shared library and packages it into an APK using the SDL3 Android Java wrapper. Assets are bundled directly into the APK's asset manager:
Сборка для Android компилирует библиотеку .so для arm64-v8a и упаковывает её в APK через обертку SDL3. Все ресурсы автоматически включаются в ассеты 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
OpenGL ES 3.0 is automatically used. The dual-zone virtual joystick and on-screen jump button appear automatically on Android touchscreens.
Автоматически используется OpenGL ES 3.0. Двухзонный виртуальный джойстик и экранная кнопка прыжка активны по умолчанию на сенсорных экранах Android.
Compile to WebAssembly using the Emscripten SDK (emcmake). Assets are packed using --embed-file assets@/assets:
Скомпилируйте проект в WebAssembly с помощью Emscripten SDK (emcmake). Ресурсы упаковываются с ключом --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
The mouse cursor arrow remains visible when loading. Click into the canvas to engage first-person pointer lock; press ESC once to release the cursor.
Курсор мыши виден при первой загрузке. Кликните в область игры для захвата мыши; нажмите ESC один раз для освобождения курсора.
Step 4: Controls & Input Methods Шаг 4: Управление и ввод
| Platform / InputПлатформа / Ввод | ControlУправление | ActionДействие |
|---|---|---|
| Desktop & Web | W A S D | Move forward, backward, strafe left and rightДвижение вперед, назад, стрейф влево и вправо |
| Mouse LookДвижение мыши | Rotate camera (Yaw & Pitch) with smoothed sensitivityВращение камеры (рыскание и тангаж) | |
| Space | Jump via Box3D impulseПрыжок через импульс Box3D | |
| Esc | Release mouse cursor (click canvas to recapture)Освободить курсор (кликните в экран для возврата) | |
| Android Touch | Left Screen TouchКасание левой части | Floating virtual joystick for movement & strafingПлавающий виртуальный джойстик для перемещения и стрейфа |
| Right Screen SwipeСвайп правой части | Independent camera aiming & rotation (Multi-Touch)Независимый поворот и прицеливание (Multi-Touch) | |
| 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 Debug Legend Шаг 5: Легенда отладочной визуализации
| IndicatorИндикатор | SubsystemПодсистема | DescriptionОписание |
|---|---|---|
| 🔷 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 Поддержка криптовалютой