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

为瓦片地图添加碰撞

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

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

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

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

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

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

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 将阻止你的世界移动。此外还有助于物理系统优化计算,因为它现在知道刚体不能移动。

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

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

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值