Skip to main content

FirstPersonBehavior

@zylem/game-lib


@zylem/game-lib / behavior / FirstPersonBehavior

Variable: FirstPersonBehavior

const FirstPersonBehavior: BehaviorDescriptor<FirstPersonBehaviorOptions, \{ attachViewmodel: (entity, offset) => void; getPitch: () => number; getState: () => FirstPersonState; getYaw: () => number; \}, FirstPersonEntity>

Defined in: node_modules/.pnpm/@zylem+behaviors@0.8.9_@types+react@19.3.0_react@19.3.0_three@0.185.1/node_modules/@zylem/behaviors/dist/first-person.d.ts:195

FirstPersonBehavior - typed descriptor for first-person movement and camera control.

Provides complete first-person controller including:

  • WASD movement relative to camera yaw
  • Mouse look driving a FirstPersonPerspective
  • Optional viewmodel positioning (weapon/item following camera)
  • Walk/run state tracking via FSM

Example​

import { FirstPersonBehavior } from "@zylem/game-lib/behavior";
import { createCamera, Perspectives, FirstPersonPerspective } from "@zylem/game-lib/core";
import { createActor } from "@zylem/game-lib/entity";

const fpsCamera = createCamera({ perspective: Perspectives.FirstPerson, ... });
const fps = fpsCamera.getPerspective<FirstPersonPerspective>();

const player = createActor({ name: 'player', ... });
const controller = player.use(FirstPersonBehavior, {
perspective: fps,
walkSpeed: 8,
runSpeed: 16,
lookSensitivity: 2,
});

// In update loop - write input, behavior handles the rest
player.onUpdate(({ inputs }) => {
player.$fps.moveX = inputs.p1.axes.Horizontal.value;
player.$fps.moveZ = inputs.p1.axes.Vertical.value;
player.$fps.lookX = inputs.p1.axes.SecondaryHorizontal.value;
player.$fps.lookY = inputs.p1.axes.SecondaryVertical.value;
player.$fps.sprint = inputs.p1.shoulders.LTrigger.held > 0;
});