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
@@ -25,6 +25,9 @@ public class GameModeManager : MonoBehaviour
|
||||
[Tooltip("Free-fly spectator camera. Empty = found automatically. Absent = Free Cam is left out of the cycle.")]
|
||||
public FreeCamController freeCam;
|
||||
|
||||
[Tooltip("First-person camera. Empty = found automatically. Absent = First Person is left out of the cycle.")]
|
||||
public FirstPersonController firstPerson;
|
||||
|
||||
//[Tooltip("Insect / surface-walk controller. Empty = found automatically.")]
|
||||
//public InsectController insect;
|
||||
|
||||
@@ -43,6 +46,7 @@ public class GameModeManager : MonoBehaviour
|
||||
public ThirdPersonOrbitInput CameraInput => cameraInput;
|
||||
public MeshPainter Painter => painter;
|
||||
public FreeCamController FreeCam => freeCam;
|
||||
public FirstPersonController FirstPerson => firstPerson;
|
||||
//public InsectController Insect => insect;
|
||||
|
||||
/// <summary>Raised after a mode switch finishes (the new mode's Enter has already run).
|
||||
@@ -63,6 +67,7 @@ public class GameModeManager : MonoBehaviour
|
||||
if (!painter) painter = FindFirstObjectByType<MeshPainter>();
|
||||
// Include inactive so a freecam rig that starts disabled is still found and wired.
|
||||
if (!freeCam) freeCam = FindFirstObjectByType<FreeCamController>(FindObjectsInactive.Include);
|
||||
if (!firstPerson) firstPerson = FindFirstObjectByType<FirstPersonController>(FindObjectsInactive.Include);
|
||||
//if (!insect) insect = FindFirstObjectByType<InsectController>();
|
||||
|
||||
BuildModes();
|
||||
@@ -90,6 +95,10 @@ public class GameModeManager : MonoBehaviour
|
||||
if (freeCam)
|
||||
_modes.Add(new FreeCamMode());
|
||||
|
||||
// First Person only joins the cycle when a first-person rig is present, so scenes without one are unchanged.
|
||||
if (firstPerson)
|
||||
_modes.Add(new FirstPersonMode());
|
||||
|
||||
// Insect mode only joins the Tab cycle when a surface walker is present, so a scene
|
||||
// without one behaves exactly as before (no dead, player-freezing mode in the cycle).
|
||||
//if (insect)
|
||||
|
||||
Reference in new issue
Block a user