进入视角

基本信息

属性 值
所属配置类 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 ❌

相关条目