我正在制作“俄罗斯方块”,但在使旋转适用于一组块时遇到问题。我的积木组由4个积木精灵组成,它们是一个空游戏对象的子代。
我通过更新父对象变换的位置/旋转,验证新位置在网格内,然后更新各个子块来移动/旋转块。
this.transform.position += new Vector3(1, 0);
if (IsValidGridPos())
UpdateGrid();
this.transform.Rotate(0, 0, -90);
if (IsValidGridPos())
UpdateGrid();
对于每个组,我都有一个中心点,我希望该组在其中移动/旋转。下图显示了每个组的中心点。
此功能适用于大多数组,但直线和正方形组除外。由于这两个组的中心点都不在子块的中间,因此它抛弃了我用来保存所有块位置的2D数组中的块位置。
是否有更好的方法来处理组的移动/旋转?
答案 0 :(得分:0)
对于组I和O,它们的中心点位于其子块之间或在块的侧面。这导致我的生成脚本将组的中心点放置在正确的位置,而不是其子块。
Group_I的职位及其子职位。
为解决此问题,我创建了一个新脚本,该脚本将在创建组后立即将组的变换位置在x和y轴上移动0.5。
const float DISTANCE = 0.5f;
void Awake()
{
// Moves the center point of a Group over so it's
// child blocks can align correctly with the game grid.
this.transform.position += new Vector3(DISTANCE, DISTANCE);
}
如果有人有更好的解决方案,请随时告诉我。感谢所有对我的问题发表评论的人。