【Unity2D】禁止角色走入水中(瓦片地图碰撞)

为瓦片地图添加碰撞

1. 在 Hierarchy 中,选择 Tilemap 游戏对象。

2. 在 Inspector 中,单击 Add Component 按钮。

3. 搜索“Tilemap Collider 2D”,添加该组件

此时,Scene 视图中所有瓦片都添加了绿色碰撞体方块

【Unity2D】禁止角色走入水中(瓦片地图碰撞)_第1张图片

现在所有的瓦片都已设置为进行碰撞。

4.在 Project 窗口中,找到 Tile 文件夹。选择所有不是水的瓦片。(你可以单击一个瓦片,然后按住 Shift 并单击列表中的最后一个瓦片来全部选中。)

【Unity2D】禁止角色走入水中(瓦片地图碰撞)_第2张图片

5.在 Inspector 中,找到 Collider Type 属性,然后将该属性从 Sprite(目前值)更改为 None。

现在,你选择的瓦片不再被视为碰撞体。如果在 Hierarchy 中选择 Tilemap,你将在 Scene 视图中看到只有水面瓦片具有绿色方块。

 瓦片地图碰撞的优化

最后一小步是设置瓦片地图碰撞体。目前,正如在 Scene 视图中看到的,每个瓦片都是一个单独的碰撞体。 这种方法效果良好,但会产生两个问题:

  • 物理系统的计算量更大;如果你的世界很大,可能会减慢你的游戏速度。

  • 在瓦片之间的边界上会产生小问题。由于瓦片是两个并排的碰撞体,并且两者之间存在微小间隙,因此有时计算上的微小误差也可能导致仍会发生碰撞的罕见情况。

为了解决这些问题,Unity 提供了一个名为 Composite Collider 2D 的组件。此组件可以获取对象(或对象的子对象)上的所有碰撞体,并由此创建一个大碰撞体。

1. 在 Hierarchy 中,选择 Tilemap 游戏对象。 2. 在 Inspector 中,单击 Add Component 按钮。 3. 搜索“Composite Collider 2D”,然后选择此组件。

你会看到自动添加 Rigidbody 2D 组件,因为复合碰撞体需要 Rigidbody 2D 才能正常运行。

4. 在 Tilemap Collider 2D 组件中,启用 Used By Composite 复选框。 5.在 Rigidbody 2D 组件中,将 Rigidbody Body Type 属性设置为 Static。 将此属性设置为 Static 将阻止你的世界移动。此外还有助于物理系统优化计算,因为它现在知道刚体不能移动。

【Unity2D】禁止角色走入水中(瓦片地图碰撞)_第3张图片

现在,围绕水面瓦片的碰撞体是一个大矩形(你可以在瓦片地图碰撞体 (Tilemap Collider) 上启用和禁用 Used by Composite 以便在 Scene 视图中进行比较)。

如果你绘制新的水面瓦片,Unity 会自动更新瓦片地图的复合碰撞体 (Composite Collider) 以便包含新的碰撞体。

 

 

你可能感兴趣的:(unity)