繁体   English   中英

块滑动游戏的基于网格的运动

[英]Grid Based Movement for a Block Sliding Game

https://www.gamesmen.com.au/rush-hour-traffic-jam-logic-board-game

我尝试在 Unity 中重新创建这款游戏。 我尝试制作滑块脚本,并且它有效。 假设我用网格制作它,是的,我可以在上面放置瓷砖的网格。 那么我怎样才能使块在网格上捕捉呢? 特别是如果块的长度超过 1 块?

他们的工作方式是我目前使用 OnMouseDown,因为我计划在 Android 上构建它,但现在的问题是我不知道如何使用 OnMouseUp 使这些块对齐网格。

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

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;
    }

我的期望是块的 pivot 检测到网格的每个图块,并在鼠标上捕捉到它

您可以将触发对撞机添加到块中。 然后为网格中的每个 position 添加一个空的 GameObject,我们称之为 SnapLocation。 然后 OnMouseButtonUp 您可以将块 position 移动到 SnapLocation 的 position。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM