Add first-person camera mode with pose-aware eye offset and yaw facing
Introduce a FirstPersonController / FirstPersonMode pair (mirroring the free-cam mode) wired into the GameModeManager Tab cycle. In first person the mesh is hidden, the eye sits on CameraTarget plus a per-pose firstPersonCameraTargetYOffset, and the character body yaw is driven to match the camera via a new single-writer FaceYaw hook on PlayerCharacterController. Also includes user content edits (poses, prefabs, scene) carried along. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
381b21cd02
commit
cfb767f6cb
17 files changed
+681
-91
No files matched your search
@@ -0,0 +1,41 @@
|
||||
/// <summary>
|
||||
/// First-person mode. The player keeps walking (WASD, camera-relative) but the camera moves to the
|
||||
/// player's eye (the CameraTarget) with free mouse-look, and the player's mesh is hidden so the body
|
||||
/// isn't seen from the inside. The orbit camera input is disabled while here so it doesn't fight for
|
||||
/// the cursor; the <see cref="FirstPersonController"/> drives its own dedicated CinemachineCamera.
|
||||
/// </summary>
|
||||
public class FirstPersonMode : GameMode
|
||||
{
|
||||
public override string DisplayName => "First Person";
|
||||
|
||||
public override void Enter()
|
||||
{
|
||||
// Player stays fully controllable; only the view changes.
|
||||
if (Manager.Player)
|
||||
{
|
||||
Manager.Player.enabled = true;
|
||||
Manager.Player.ControlEnabled = true;
|
||||
}
|
||||
|
||||
if (Manager.Painter)
|
||||
Manager.Painter.PaintingEnabled = false;
|
||||
|
||||
// The orbit rig would otherwise keep grabbing the cursor and reading the mouse every frame.
|
||||
if (Manager.CameraInput)
|
||||
Manager.CameraInput.enabled = false;
|
||||
|
||||
if (Manager.FirstPerson)
|
||||
Manager.FirstPerson.SetActive(true);
|
||||
}
|
||||
|
||||
public override void Exit()
|
||||
{
|
||||
// Modes are Enter-only, so first-person must undo its own camera takeover (and unhide the mesh)
|
||||
// here; the next mode's Enter restores the player/painter/look-mode state.
|
||||
if (Manager.FirstPerson)
|
||||
Manager.FirstPerson.SetActive(false);
|
||||
|
||||
if (Manager.CameraInput)
|
||||
Manager.CameraInput.enabled = true;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user