
无遮挡第三人称摄像机
一个Hytale服务器插件,提供功能齐全的第三人称视角系统,具备服务器权威的方块/实体交互校正、摄像机周围自动方块透明化功能,以及基于俯仰角的第一人称切换功能。
查看大图无障碍第三人称摄像机插件
描述已过时——需要更新 目前不建议使用半径命令调整任何设置,仅使用预设
这是一个 Hytale 服务器插件,提供功能完整的第三人称摄像机系统,包括服务器权威的方块/实体交互修正、摄像机周围方块的自动透明化,以及基于俯仰角的第一人称切换。
推荐资源包: 我的第三人称包
功能
- 摄像机透明体积 — 自动使摄像机周围椭球体内的方块变透明,确保视角不被附近的几何体遮挡
- 基于俯仰角的第一人称切换 — 当玩家视角陡峭向上或向下(超过 ±55°)时自动切换到第一人称,角度恢复后回到第三人称
- 玩家加入世界时自动执行默认设置命令
命令
/UnobstructedCamera(别名:/NoClipCamera、/UCamera、/UC)
控制摄像机的主命令组。
| 子命令 | 描述 | 用法 |
|---|---|---|
Start |
激活第三人称摄像机 | /UC Start [--radius] |
Stop |
停用摄像机并恢复默认设置 | /UC Stop |
Start 接受可选的 Radius 浮点数参数,用于设置透明区域的半径(默认值:6.0)。
示例:
/UC Start — 使用默认半径(6.0)启动
/UC Start --radius 10.0 — 启动,摄像机位于玩家后方10格
/UC Stop — 恢复默认摄像机
工作原理
摄像机激活流程
- 玩家运行
/UC Start - 创建一个半径为5的椭球体
CameraTransparencyVolume - 向客户端发送
SetServerCamera数据包
摄像机透明体积
为防止摄像机位于实心方块内部(在墙壁/天花板附近的第三人称视角中常见)
- 每帧计算摄像机的方块空间位置
- 围绕摄像机锚点维护一个椭球体方块位置体积
- 通过
UpdateBlockTypes数据包向客户端发送假透明方块类型 - 使用
ServerSetBlock将客户端上的真实方块替换为透明变体 - 当方块离开体积或摄像机停用时恢复原始方块
- 玩家重新连接时重置所有跟踪状态,避免纹理引用过期
未来功能
- ⏹️ 在加载/卸载透明方块时增加小延迟或缓冲区域,防止"闪烁"
- ⏹️ 改善与梯子的兼容性
- ⏹️ 添加第二层透明方块以平滑过渡
- ⏹️ 在玩家脚底添加"阴影"对象,俯视时提供位置参考
- 🔽 进一步增强资源编辑器能力
- ✅ 在摄像机低于脚部时加入摄像机碰撞检测
- ✅ 摄像机视角切换的默认覆盖
已知错误
- 🐞 切换摄像机模式可能导致摄像机穿过地面
- 🐞 在"透明"方块椭球体内破坏方块可能会产生幽灵方块
- ☑️ 与更新3的不兼容警告
- ☑️ 使某些物体透明时偶尔崩溃
- ☑️ 首次运行命令导致某些方块纹理为空
- ☑️ 旋转摄像机加载新方块后可解决
- ☑️ 加载模组后,必须使用命令在第一人称和第三人称视角间切换
- ☑️ 客户端预览方块放置和方块选择功能失效
- ☑️ 面向南方时,破坏方块的能力可能不一致。
- ☑️ 在某些情况下,传送至新世界后可能无法破坏方块
已移除功能——计划重新加入
点击展开
基于俯仰角的第一人称切换
当玩家视角陡峭向上或向下(与水平线夹角超过 ±55°)时,插件自动移除玩家角色视图。这避免了查看玩家脚部或直视上方时出现的尴尬摄像机角度。该切换仅在状态实际变化时发送 SetServerCamera 数据包,避免数据包洪泛。
为性能和可靠性移除的内容
点击展开
CustomCameraSettings创建一个ServerCameraSettings,包含:distance = 3.0(或自定义)、positionOffset = (0, 1, 0)、eyeOffset = trueisFirstPerson = false、displayReticle = true- 位置/旋转插值速度
0.9
- 为玩家启用
InteractionPositionFixer,并接收摄像机设置
交互位置修正
Hytale 的交互系统是客户端权威的:客户端计算准星对准的方块并向服务器发送该位置。在自定义第三人称摄像机中,客户端的瞄准目标可能与服务器预期的不同,因为服务器原生不处理摄像机偏移。InteractionPositionFixer 通过以下方式解决:
- 每100毫秒从摄像机原点(
eyePos + positionOffset)沿玩家视线方向执行服务器端射线追踪 - 射线追踪跳过由
CameraTransparencyVolume设为透明的方块(使用TargetUtil.getTargetBlockAvoidLocations) - 拦截传入的
SyncInteractionChains数据包,将方块/实体位置重写为服务器计算的目标 - 清除重复的
ClientPlaceBlock数据包,并在客户端预测位置重新同步幽灵方块 - 修正放置交互的
BlockFace,使相邻方块正确朝向
默认摄像机设置
| 设置 | 值 |
|---|---|
distance |
3.0 |
positionOffset |
(0, 1, 0) |
eyeOffset |
true |
isFirstPerson |
false |
displayReticle |
true |
positionLerpSpeed |
0.9 |
rotationLerpSpeed |
0.9 |
正在加载版本记录…







正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。