吸附系统¶
吸附系统用于将建筑预览对齐到附近建筑的 Socket。
吸附只影响放置过程,不参与结构支撑判断。建筑是否获得支撑,由放置后的碰撞关系决定。
Note
未使用吸附的建筑仍然可以获得支撑。
完成吸附也不代表建筑一定具有有效支撑。
工作流程¶
| 内容 | 说明 |
|---|---|
Socket |
Static Mesh 上的吸附位置和旋转。 |
Snap Point |
Socket 对应的吸附规则。 |
Snap Group |
限制哪些 Socket 可以互相连接。 |
Connection Axis |
定义 Socket 使用的连接方向。 |
吸附设置¶
打开:
| 设置项 | 默认值 | 说明 |
|---|---|---|
Enable Snapping |
启用 | 是否启用全局 Socket 吸附。 |
Snap Distance |
50 cm |
候选搜索范围和 Socket 最大接受距离。 |
Snap Direction Tolerance |
-0.9 |
两个连接方向 Dot 值的允许上限。 |
Snap Points |
空 | 项目中的吸附点定义。 |
Available Snap Groups |
空 | 项目允许使用的吸附分组。 |
其他项目级设置请参阅 插件设置。
Snap Distance¶
Snap Distance 同时控制候选搜索和精确距离过滤。
第一次检测¶
以当前 Aim 命中点为中心:
- 在
Snap Distance范围内收集附近建筑。 - 检查候选 Socket 到 Aim 命中点的距离。
- 距离不超过
Snap Distance的 Socket 才能成为候选。
第二次检测¶
以 Ghost 建筑的 Box Bounds 为基础:
- 将 Box 向外扩展
Snap Distance,收集附近建筑。 - 检查候选 Socket 到 Ghost Box 边缘的距离。
- 距离不超过
Snap Distance的 Socket 才能成为候选。
Overlap 查询使用组件 Bounds,因此搜索完成后仍需要检查每个 Socket 的实际距离。
候选建筑通常通过 Building Object Channel 查询。碰撞配置请参阅 碰撞配置。
方向匹配¶
系统会计算两个 Socket 连接方向的 Dot 值。
候选才能通过方向检查。
默认值为 -0.9。数值越接近 -1,要求两个方向越接近完全相反。
Snap Points¶
每个 Snap Point 包含:
| 字段 | 说明 |
|---|---|
Socket Name |
Static Mesh 中对应的 Socket 名称。 |
Groups |
当前 Socket 所属的一个或多个兼容组。 |
Connection Axis |
Socket 使用的连接主轴。 |
Is Local |
是否根据 Socket 本地旋转计算连接方向。 |
Socket Name 必须与 Static Mesh 中的名称完全一致。
推荐统一命名:
Connection Axis¶
Connection Axis 表示 Socket 使用哪条轴作为连接方向。
通常建议统一使用:
即使用 Socket 的本地 X 轴。
不同位置的 Socket 可以使用相同的 Connection Axis,再通过 Socket Rotation 调整实际朝向。
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:
Note
相同 Group 只表示允许参与匹配,最终仍需要通过距离和方向检查。
配置步骤¶
- 在 Static Mesh 上创建 Socket。
- 调整 Socket 的位置和旋转。
- 在
Snap Points中添加相同名称。 - 设置
Groups。 - 设置
Connection Axis。 - 确保建筑使用正确的
Building Object Channel。 - 进入建造模式测试吸附。
基础示例:
| 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 Snapping、Snap Distance 和 Building Object Channel。 |
| 找到建筑但没有吸附 | 检查 Snap Group、Socket 距离和方向。 |
| 吸附方向错误 | 检查 Socket Rotation、Connection Axis 和方向容差。 |
| Socket 无法识别 | 检查 Socket 名称是否完全一致。 |
| 吸附到错误位置 | 减小 Snap Distance 或细分 Snap Group。 |
| 关闭吸附后无法获得支撑 | 检查建筑碰撞和支撑通道。 |