Unity Android UI按钮替换Snake的WASD控件

时间:2018-09-24 20:20:08

标签: c# unity3d

我是编程的新手,所有东西。我在youtube上观看了如何创建蛇游戏,并且想为按钮添加脚本来移动播放器。我创建了ui buttons like this,但是当我单击它们时,没有任何反应。我为跨平台添加了简单的资产,并且已经完成了所有工作,但是我不知道如何编写脚本。我可以使用W A S D键移动蛇,但是我想使用UI按钮移动。这是我的脚本:

 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 :(得分:1)

对于初学者来说,Unity has a great ~13 minute video on using UI Buttons。观看此视频后,您将了解如何将UI按钮连接到事件(如果您想跳过按钮如何工作的视觉细节,请在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所述)。

答案 1 :(得分:1)

那应该很简单。您可以创建处理事件的方法。例如,假设您要将SetDirection(Direction.up);绑定到“ 向上按钮” ,则可以为此目的创建一个方法。

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

返回编辑器,单击“向上”按钮,通过单击+号添加一个OnClick事件。将脚本拖到空白位置,然后从DropDown中选择相关功能。我希望你能得到这个吗?