跳转至

吸附系统

吸附系统用于将建筑预览对齐到附近建筑的 Socket。

吸附只影响放置过程,不参与结构支撑判断。建筑是否获得支撑,由放置后的碰撞关系决定。

Note

未使用吸附的建筑仍然可以获得支撑。

完成吸附也不代表建筑一定具有有效支撑。

工作流程

更新建筑预览
→ 搜索候选建筑
→ 收集 Socket
→ 检查分组、距离和方向
→ 计算吸附 Transform
→ 更新建筑预览
内容 说明
Socket Static Mesh 上的吸附位置和旋转。
Snap Point Socket 对应的吸附规则。
Snap Group 限制哪些 Socket 可以互相连接。
Connection Axis 定义 Socket 使用的连接方向。

吸附设置

打开:

Edit → Project Settings → Building System → Snapping
设置项 默认值 说明
Enable Snapping 启用 是否启用全局 Socket 吸附。
Snap Distance 50 cm 候选搜索范围和 Socket 最大接受距离。
Snap Direction Tolerance -0.9 两个连接方向 Dot 值的允许上限。
Snap Points 项目中的吸附点定义。
Available Snap Groups 项目允许使用的吸附分组。

其他项目级设置请参阅 插件设置

Snap Distance

Snap Distance 同时控制候选搜索和精确距离过滤。

第一次检测

以当前 Aim 命中点为中心:

  1. Snap Distance 范围内收集附近建筑。
  2. 检查候选 Socket 到 Aim 命中点的距离。
  3. 距离不超过 Snap Distance 的 Socket 才能成为候选。

第二次检测

以 Ghost 建筑的 Box Bounds 为基础:

  1. 将 Box 向外扩展 Snap Distance,收集附近建筑。
  2. 检查候选 Socket 到 Ghost Box 边缘的距离。
  3. 距离不超过 Snap Distance 的 Socket 才能成为候选。
Snap Distance
→ 扩展组件查询范围
→ 限制 Socket 的精确接受距离

Overlap 查询使用组件 Bounds,因此搜索完成后仍需要检查每个 Socket 的实际距离。

候选建筑通常通过 Building Object Channel 查询。碰撞配置请参阅 碰撞配置

方向匹配

系统会计算两个 Socket 连接方向的 Dot 值。

Dot <= Snap Direction Tolerance

候选才能通过方向检查。

默认值为 -0.9。数值越接近 -1,要求两个方向越接近完全相反。

Snap Points

每个 Snap Point 包含:

字段 说明
Socket Name Static Mesh 中对应的 Socket 名称。
Groups 当前 Socket 所属的一个或多个兼容组。
Connection Axis Socket 使用的连接主轴。
Is Local 是否根据 Socket 本地旋转计算连接方向。

Socket Name 必须与 Static Mesh 中的名称完全一致。

推荐统一命名:

Snap_Left
Snap_Right
Snap_Top
Snap_Bottom
Snap_Front
Snap_Back

Connection Axis

Connection Axis 表示 Socket 使用哪条轴作为连接方向。

通常建议统一使用:

(1, 0, 0)

即使用 Socket 的本地 X 轴。

不同位置的 Socket 可以使用相同的 Connection Axis,再通过 Socket Rotation 调整实际朝向。

Snap_Left  的本地 X 轴朝向左侧
Snap_Right 的本地 X 轴朝向右侧

Note

Connection Axis 表示连接主轴,不表示 Socket 位于建筑的哪个方向。

Is Local

启用时,系统会根据 Socket 的本地旋转计算实际连接方向。

关闭时,连接方向按世界空间处理,通常需要旋转 Ghost 建筑才能满足方向匹配。

一般建议保持启用。

Snap Groups

两个 Socket 必须至少拥有一个相同 Group,才会继续检查距离和方向。

例如:

Socket Groups
Snap_Left Horizontal
Snap_Right Horizontal
Snap_Top Vertical
Snap_Bottom Vertical

此时:

  • 左右 Socket 可以匹配
  • 上下 Socket 可以匹配
  • 水平与垂直 Socket 不会匹配

一个 Socket 可以属于多个 Group:

Groups = Horizontal, Decoration

Note

相同 Group 只表示允许参与匹配,最终仍需要通过距离和方向检查。

配置步骤

  1. 在 Static Mesh 上创建 Socket。
  2. 调整 Socket 的位置和旋转。
  3. Snap Points 中添加相同名称。
  4. 设置 Groups
  5. 设置 Connection Axis
  6. 确保建筑使用正确的 Building Object Channel
  7. 进入建造模式测试吸附。

基础示例:

Socket Name Groups Connection Axis
Snap_Left Horizontal (1, 0, 0)
Snap_Right Horizontal (1, 0, 0)
Snap_Top Vertical (1, 0, 0)
Snap_Bottom Vertical (1, 0, 0)

实际连接方向由 Socket Rotation 决定。

吸附与结构支撑

功能 吸附系统 支撑系统
用途 对齐建筑预览 判断结构是否有效
使用阶段 放置过程中 放置后或结构变化时
判断依据 Socket、Group、距离和方向 建筑碰撞接触
是否触发坍塌

结构支撑请参阅 结构支撑与坍塌

API

Snap 相关接口主要位于 Building Build Component

请参阅 吸附候选接口

常见问题

问题 检查内容
无法搜索到附近建筑 检查 Enable SnappingSnap DistanceBuilding Object Channel
找到建筑但没有吸附 检查 Snap Group、Socket 距离和方向。
吸附方向错误 检查 Socket Rotation、Connection Axis 和方向容差。
Socket 无法识别 检查 Socket 名称是否完全一致。
吸附到错误位置 减小 Snap Distance 或细分 Snap Group。
关闭吸附后无法获得支撑 检查建筑碰撞和支撑通道。