Основанное на сетке движение для блочной скользящей игры - PullRequest
0 голосов
/ 03 октября 2019

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

Я ожидаю, что стержень блока обнаружит все плитки сетки и подключится к ней onMouseUp

1 Ответ

0 голосов
/ 03 октября 2019

Вы можете добавить триггерный коллайдер в блок. Затем для каждой позиции в сетке добавьте пустой GameObject, назовем его SnapLocation. Затем OnMouseButtonUp вы можете переместить позицию блоков в позицию SnapLocation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...