Unity 6, 2D, Cinemachine 3. 我需要一个能环绕的星系:飞出右边缘,在左边重新出现,且没有可见的缝隙。常规的做法是复制每个在边缘附近的 GameObject,但有数百艘飞船、弹道和行星时,这意味着很多需要保持同步的幽灵,所以我改用相机实现:

  • 额外相机,仅在缝隙处。 当主相机的视野超过地图边缘时,我会启用 1-3 个额外相机,分别偏移正好一个地图宽度和/或高度。每个相机都有一个 Camera.rect,仅覆盖其屏幕切片,使这些切片拼接成一张完整的图像。场景中不存在任何重复。
  • 永不减去两个位置。 所有距离和方向都通过 MapWrap.ShortestDelta 辅助方法处理,该方法返回最短路径,而瞄准/转向使用目标最近的“影像”。
  • Physics2D 不知晓环绕,因此在 Physics2D.OverlapCircleNonAlloc 前加一个包装,在圆形到达缝隙时在偏移的影像上重复查询。
  • 物体在 LateUpdate 中自行包装其 Transform 并抛出事件;相机 rig 调用 CinemachineCore.OnTargetObjectWarped(target, delta),使 Cinemachine 相机随飞船跳动,而不是在整个地图上滑动。
  • 唯一的重复位置:在缝隙跨越的飞船在几帧内会镜像其 SpriteRenderer,或者在相机分割处可见被切成两半。
  • 视差背景层的タイル大小正好能整除地图,使星星在缝隙处对齐,每个缝隙相机会根据自身偏移量移动它们。

如果需要更深入了解任意部分(视口数学、Screen Space - Camera 画布、缝隙处的物理),请告诉我。项目名为 Cosmic Dominion;Steam 免费演示将于 10 月 29 日上线。