C# 基于网格的方块滑动游戏运动

C# 基于网格的方块滑动游戏运动,c#,unity3d,grid,C#,Unity3d,Grid,有一个游戏,我试图在统一中重现它。我试着制作滑动块脚本,它很有效。让我们说,我用一个网格,是的,那个网格,我可以把瓷砖放在上面。那么如何在网格上创建块捕捉呢?特别是如果块的长度超过1个瓷砖 它们的工作原理是,我现在使用OnMouseDown,因为我计划在Android上构建它,但现在的问题是,我不知道如何使用OnMouseDown使这些块与网格对齐 到目前为止,这是块的代码 private void GrabABlock() { if (Input.GetMouseBut

有一个游戏,我试图在统一中重现它。我试着制作滑动块脚本,它很有效。让我们说,我用一个网格,是的,那个网格,我可以把瓷砖放在上面。那么如何在网格上创建块捕捉呢?特别是如果块的长度超过1个瓷砖

它们的工作原理是,我现在使用OnMouseDown,因为我计划在Android上构建它,但现在的问题是,我不知道如何使用OnMouseDown使这些块与网格对齐

到目前为止,这是块的代码

private void GrabABlock()
    {
        if (Input.GetMouseButton(0)) {
            Debug.Log("blockGrab"); 
            mousePos = Input.mousePosition;
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);
            BlockPosX = mousePos.x - this.transform.position.x;
            BlockPosY = mousePos.y - this.transform.position.y;
            Grabbed = true;
            if (Grabbed == true) {
                mousePos = Input.mousePosition;
                mousePos = Camera.main.ScreenToWorldPoint(mousePos);
                switch (BlockDirection)
                {
                    case BlockShape.Horizontal:
                        HorizontalMovement();
                        break;
                    case BlockShape.Vertical:
                        VerticalMovement();
                        break;
                    case BlockShape.Square:
                        OctaMovement();
                        break;
                }
            }
        }

    }

    private void LateUpdate() // Snap to Grid
    {
        mousePos.x = Mathf.Floor(gameObject.transform.position.x / 1f) * 1f;
        mousePos.y = Mathf.Floor(gameObject.transform.position.y / 1f) * 1f;
        pivot.transform.position = mousePos;
    }

我的期望是块的轴检测网格的每个分片,并在MouseUp上捕捉到它。您可以向块添加触发器碰撞器。然后为网格中的每个位置添加一个空的游戏对象,我们称之为SnapLocation。然后在MouseButtonup上,您可以将块位置移动到SnapLocation的位置。

您使用的是基本网格还是网格布局组?我说的只是手动创建空游戏对象的列和行。使用触发器碰撞器查看您当前正在触摸的游戏对象,然后OnMouseUp将设置gameObject.transform.position=SnapLocation.transform.position。