| name | fxgl-fps-3d |
| description | Build a first-person 3D game in FXGL — set up a player-driven Camera3D, implement mouse look, move relative to the camera facing direction, add a crosshair HUD, raycast or pick 3D targets, simulate gravity and jumping, and manage a first-person weapon or interaction model. Use this skill for FPS, first-person exploration, or first-person puzzle prototypes built on FXGL's 3D scene support.
|
| triggers | ["fps","first person","fps 3d","mouse look","crosshair","hitscan","camera3d shooter","3d raycast"] |
| compatibility | Java 17+, FXGL 21.x. Requires `settings.setExperimental3D(true)` and JavaFX 3D support. Builds on the primitives in fxgl-scene3d.
|
| category | fxgl/3d |
| tags | ["fxgl","java","javafx","3d","game-types","fps"] |
| metadata | {"author":"fxgl-skills","version":"1.0","fxgl-version":"21.1"} |
| allowed-tools | ["Read","Write","Edit","Bash"] |
FXGL First-Person 3D
Layering
Use fxgl-scene3d for the base 3D setup. This skill adds the game structure for an FPS:
- first-person camera control
- gameplay movement rules
- crosshair + interaction model
- gravity and jump
- weapon / interaction feedback
Camera Setup
@Override
protected void initSettings(GameSettings settings) {
settings.setExperimental3D(true);
}
private Camera3D camera;
private double yaw = 0;
private double pitch = 0;
@Override
protected void initGame() {
camera = getGameScene().getCamera3D();
camera.getTransform().setTranslate(0, -2, -10);
camera.setFieldOfView(70);
camera.setNearClip(0.1);
camera.setFarClip(1000);
}
Mouse Look
private double prevMouseX;
private double prevMouseY;
@Override
protected void initInput() {
getInput().addMouseEventHandler(MouseEvent.MOUSE_DRAGGED, e -> {
double dx = e.getSceneX() - prevMouseX;
e.getSceneY() - prevMouseY;
yaw += dx * ;
pitch = clamp(pitch + dy * , -, );
camera.getTransform().setRotationY(yaw);
camera.getTransform().setRotationX(pitch);
prevMouseX = e.getSceneX();
prevMouseY = e.getSceneY();
});
}