我是Overwrite Conflict的单人开发者,这是一款Unity中的roguelike卡牌建造游戏。卡牌有形状,你可以旋转和放置它们在一个共享的网格上。一个小的输入决策是选择哪个形状细胞位于光标下。 旋转数学是直接的。放置逻辑中,我将每个脚印存储为一个Vector2Int偏移列表。Y指向上方,顺时针四分之一转换 (x, y) 到 (y, -x)。选择的卡片有一个工作副本的坐标,所以旋转它不会修改卡片的源形状。 边界盒中心并不总是占据一个单元。例如,一个L形的脚印可以在其中心有空白空间。如果我使用这个空白空间作为光标锚点,指针就可以坐在一个空隙里,而预览单元则围绕它。我的当前锚定规则是: * 如果形状占据该单元,则保留整数边界盒中心。 * 否则,使用平方距离选择最近的占据单元。 * 当距离打平时保留坐标列表中的第一个单元。 然后放置映射就是: Vector2Int起点 = hoveredCell - 锚点; Vector2Int目标单元 = 起点 + 旋转偏移; 我在旋转后重新计算锚点并刷新当前悬停单元的预览。这使得一个占据单元始终位于指针下,但旋转可以选择不同的占据单元作为锚点。 这是我感兴趣的权衡。当前规则优先考虑中心附近的占据单元。携带每次旋转的指定锚点会优先考虑保持同一个单元与光标相连。这些可以在非对称形状中感觉相当不同。对于你曾经工作过的网格或多边形游戏,是否喜欢固定锚点,中心锚点或让玩家抓住任何占据单元?如果你想尝试放置系统,请在Steam上查看Overwrite Conflict的免费Windows示例。