(我也在Unity Answers上问过这个问题,但有时需要一段时间才能得到答复,如果我在那里得到答复,我也会把它放在这里。)
玩家可以根据移动水平移动一定距离。我的计划是用绿色突出显示有效移动空间,用红色突出显示无效移动空间。为此,我有一个名为MovementRange的子游戏对象,它有一个圆形的collider2D,其半径与玩家的移动级别相匹配。所有设置都是默认设置。
此功能用于高亮显示范围内的瓷砖:
void HighlightCellsInRange(Collision2D collision)
{
Vector3 hitPosition = Vector3.zero;
ContactPoint2D[] contacts = new ContactPoint2D[100];
int contactCount = collision.GetContacts(contacts);
for (int i = 0; i < contactCount; i++)
{
Vector3Int tile = _tileMap.WorldToCell(contacts[i].point);
_tileMap.SetTile(tile, _greenTile);
_tilesInRange.Add(tile);
}
}
这适用于为其注册碰撞的任何平铺。问题在于,某些磁贴不注册碰撞(而其他磁贴有多个碰撞)。
以下是一些屏幕截图,您可以看到正在发生的情况:
我已在返回的所有碰撞接触中生成gizmo球体。选择“圆碰撞器”,以便可以清楚地看到缺少的平铺碰撞接触点。在圆对撞机的正中心少了6个!
在这个屏幕截图中,您可以看到栅格和每个磁贴都显示活动的六边形碰撞器。
我尝试过更改“圆碰撞器”和“tilemap碰撞器”上的设置,但我不明白为什么有些碰撞没有注册。
如有任何建议,将不胜感激。谢谢