有没有办法让对象仅与Unity中的某些Tilemap碰撞?

问题描述

我想让某些对象仅与某些图块地图统一碰撞。例如,我有一个玩家,我希望能够更改与他的对撞机交互的图块。当他在地面上时,我希望他与水互动而不能够进入水中,但是当我在船上时,我不想与水图块碰撞,而与地面图块碰撞。有办法吗?

解决方法

您可以将水面和地面分开,并通过脚本启用其图块碰撞器组件。请按照以下步骤将此功能包括在您现有的脚本中,以处理玩家进入船上的情况:

首先,在顶部包含Unity Tilemap:

using UnityEngine.Tilemaps;

然后声明tilemap对撞机变量:

[SerializeField] TilemapCollider2D groundCollider = null;
[SerializeField] TilemapCollider2D waterCollider = null;

在您的方法中,当玩家进入船时将被调用:

groundCollider.enabled = false;
waterCollider.enabled = true;

然后,只要玩家退出船,就做相反的事情:

groundCollider.enabled = true;
waterCollider.enabled = false;

别忘了将tilemap collider组件拖动到编辑器中的脚本变量中,您应该一切顺利。