Кнопки пользовательского интерфейса Unity Android для замены элементов управления WASD на Snake - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в программировании и все такое.Я посмотрел на YouTube, как создать игру змея, и я хочу добавить скрипт для моих кнопок для перемещения игрока.Я создал кнопки пользовательского интерфейса, как это , но когда я нажимаю на них, ничего не происходит, конечно.Я добавил простые ресурсы для кроссплатформенности, и все, что сделано, но я не знаю, как его написать.Я могу перемещать змею с помощью клавиш W A S D, но я хочу двигаться с помощью кнопок пользовательского интерфейса.Вот мой сценарий:

 private void Update()
    {

        if (isGameOver)
        {
            if (Input.GetKeyDown(KeyCode.R) || Input.GetMouseButtonDown(0))
            {
                onStart.Invoke();
            }
            return;
        }
        GetInput();

        if (isFirstInput)
        {
            SetPlayerDirection();

            timer += Time.deltaTime;
            if (timer > moveRate)
            {
                timer = 0;
                curDirection = targetDirection;
                MovePlayer();
            }
        }
        else
        {
            if (up || down || left || right)
            {

                isFirstInput = true;
                firstInput.Invoke();
            }
        }
    }

    void GetInput()
    {
        up = Input.GetButtonDown("Up");
        down = Input.GetButtonDown("Down");
        left = Input.GetButtonDown("Left");
        right = Input.GetButtonDown("Right");
    }

    void SetPlayerDirection()
    {
        if (up)
        {
            SetDirection(Direction.up);
        }
        else if (down)
        {
            SetDirection(Direction.down);
        }
        else if (left)
        {
            SetDirection(Direction.left);
        }
        else if (right)
        {
            SetDirection(Direction.right);
        }
    }

    void SetDirection(Direction d)
    {
        if (!isOpposite(d))
        {
            targetDirection = d;
        }
    }

    void MovePlayer()
    {

        int x = 0;
        int y = 0;

        switch (curDirection)
        {

            case Direction.up:
                y = 1;
                break;
            case Direction.down:
                y = -1;
                break;
            case Direction.left:
                x = -1;
                break;
            case Direction.right:
                x = 1;
                break;

        }

        Node targetNode = GetNode(playerNode.x + x, playerNode.y + y);
        if (targetNode == null)
        {
            //Game Over
            onGameOver.Invoke();
        }
        else
        {
            if (isTailNode(targetNode))
            {
                //GameOver
                onGameOver.Invoke();
            }
            else
            {



                bool isScore = false;

                if (targetNode == appleNode)
                {
                    isScore = true;
                }

                Node previousNode = playerNode;
                availbableNodes.Add(previousNode);


                if (isScore)
                {
                    tail.Add(CreateTailNode(previousNode.x, previousNode.y ,tailParent));
                    availbableNodes.Remove(previousNode);
                }

                MoveTail();
                PlacePlayerObject(playerObj, targetNode.worldPosition);
                playerNode = targetNode;
                availbableNodes.Remove(playerNode);

                if (isScore)
                {

                    currentScore++;
                    if(currentScore >= highScore)
                    {
                        highScore = currentScore;
                    }

                    onScore.Invoke();

                    if (availbableNodes.Count > 0)
                    {
                        RandomlyPlaceApple();
                    }
                    else
                    {
                        //you won
                    }
                }
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Это должно быть довольно просто.Вы можете создать методы для обработки событий.Например, предположим, что вы хотите привязать SetDirection(Direction.up); к « кнопке вверх» , вы можете создать метод для этой цели.

public void UpDirection(){
SetDirection(Direction.up);
}

Вернитесь в Редактор, нажмитена кнопке «вверх» добавьте событие OnClick, нажав знак «+».Перетащите ваш скрипт в пустой слот, затем вы должны выбрать соответствующую функцию из DropDown.Я надеюсь, что вы поняли это?

0 голосов
/ 24 сентября 2018

Для начала, Unity имеет отличное 13-минутное видео об использовании кнопок пользовательского интерфейса .Посмотрев это видео, вы поймете, как подключить кнопку пользовательского интерфейса к событию (посмотрите в 8:25, если хотите пропустить визуальные подробности о том, как работают кнопки).Затем вы захотите добавить четыре функции в ваш скрипт для ваших четырех кнопок со стрелками, например, так:

public void UpButtonPressed()
{
    SetDirection(Direction.up);
}
public void DownButtonPressed()
{
    SetDirection(Direction.down);
}
public void LeftButtonPressed()
{
    SetDirection(Direction.left);
}
public void RightButtonPressed()
{
    SetDirection(Direction.right);
}

Затем просто присоедините их к событиям OnClick правильной кнопки в инспекторе (как описано в этом видеов 8:25).

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