进入视角
基本信息
| 属性 | 值 |
|---|---|
| 所属配置类 | MiscConfig |
| 字段 | public static Perspective initialPerspective |
| 类型 | 枚举 MiscConfig.Perspective |
| 默认值 | INSIDE(@Config.DefaultEnum("INSIDE")) |
| 服务端同步 | ❌ 无 @Config.Sync |
| 配置分类 | category = "misc" |
| 配置注释 | Camera perspective when entering freecam |
取值穷举
| 取值 | 位移 | 额外旋转 | 距离常量 |
|---|---|---|---|
INSIDE |
无 | 无 | — |
FIRST_PERSON |
沿视线前移 | 无 | FIRST_PERSON_DISTANCE = 0.4 |
THIRD_PERSON |
沿视线后移 | 无 | THIRD_PERSON_DISTANCE = 4.0 |
THIRD_PERSON_MIRROR |
沿视线前移 | rotationYaw += 180.0F、prevRotationYaw += 180.0F |
THIRD_PERSON_DISTANCE = 4.0 |
视线向量的计算
applyPerspectiveOffset()(FreecamController.java:179)先由相机的 yaw/pitch 算出单位视线向量:
double yawRad = Math.toRadians(cameraEntity.rotationYaw);
double pitchRad = Math.toRadians(cameraEntity.rotationPitch);
double lookX = -Math.sin(yawRad) * Math.cos(pitchRad);
double lookY = -Math.sin(pitchRad);
double lookZ = Math.cos(yawRad) * Math.cos(pitchRad);
之后按上表的符号做 cameraEntity.setPosition(pos ± look * 距离)。
源码注释标明该方法"main logic from orientCamera"——照搬自原版第三人称相机逻辑。
关键限制:只对普通自由相机生效
applyPerspectiveOffset() 只在 FreecamController.enable() 的最后一行被调用。
enableTripod(slot) 不调用它。
因此:
| 进入方式 | 是否应用 initialPerspective |
|---|---|
松开 F4(enable()) |
✅ 应用 |
按住 F4 + 数字键 1~9(enableTripod()) |
❌ 跳过 |
freecam 中途换机位(switchTripod()) |
❌ 跳过 |
配置项名字叫"进入 freecam 时的视角",但三脚架路径不受它控制。详见
三脚架相机槽位 中 enable() 与 enableTripod() 的逐字段对比。
与强制第一人称的关系
偏移是在强制 thirdPersonView = 0 之上再做的:enable() 先把
mc.gameSettings.thirdPersonView = 0(并备份原值),再按本配置移动相机实体。
所以 THIRD_PERSON 并不会让游戏设置回到第三人称,而是把相机实体挪到玩家身后 4 格、
仍然以第一人称渲染管线渲染该位置。
自由相机激活期间 F5 视角切换被 MixinMinecraft 的 @Redirect 屏蔽(写回值强制为 0),
退出时 disable() 恢复 previousPerspective。
其它配置项
MiscConfig 共 5 项:
| 字段 | 类型 | 默认值 | 服务端同步 |
|---|---|---|---|
| fullBright | boolean |
false |
✅ |
| disableSubmersionFog | boolean |
false |
✅ |
| overlayVisibility | OverlayVisibility |
HIDE |
✅ |
initialPerspective |
Perspective |
INSIDE |
❌ |
| showHand | boolean |
false |
❌ |
相关条目
- 自由相机状态机 -
applyPerspectiveOffset的调用点与距离常量 - 三脚架相机槽位 - 唯一会跳过本配置的进入路径
- 脱离实体 -
setPosition以碰撞箱中心重建包围盒 - Mixin 加载阶段 - 屏蔽 F5 视角切换的
@Redirect