单击按钮游戏逻辑无法正常工作

时间:2017-01-04 02:33:44

标签: c# unity3d 2d

在我的脚本中,每当您点击"按钮"它会为你的分数增加1分。当您错过按钮10次时,它会加载一个新场景而您将失去游戏。单击按钮时,它会将总数重置为0.我遇到的问题是,如果您错过了按钮9次,然后在第10次点击它仍然计数到10并且它加载新屏幕而您输了。

应该做的是将其重置为0并继续播放。

loseObject在游戏开始时和按下按钮时将金额设置为0.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
[RequireComponent(typeof(AudioSource))]

public class ButtonReposition : MonoBehaviour
{
public Button prefab;
public GameObject loseObject;
private int count;
public Text countText;

// Use this for initialization

void Start()
{
    count = 0;
    SetCountText();
    float x = Random.Range(325f, -600f);
    float y = Random.Range(250f, -450f);
    Debug.Log(x + "," + y);
    prefab.GetComponent<RectTransform>().anchoredPosition = new Vector2(x, y);
    loseObject.GetComponent<Lose>().amount = 0;
}

public void Move()
{
    float x = Random.Range(325f, -600f);
    float y = Random.Range(250f, -450f);
    Debug.Log(prefab.transform.position.x + "," + prefab.transform.position.y);
    prefab.GetComponent<RectTransform>().anchoredPosition = new Vector2(x, y);
    loseObject.GetComponent<Lose>().amount = 0;
    count = count + 1;
    SetCountText();
}

void SetCountText()
{
    countText.text = "Count: " + count.ToString();
}
}

点按鼠标按钮,它会增加总数1并加载下一个场景。

using UnityEngine.Audio;
using UnityEngine.UI;

public class Lose : MonoBehaviour
{
public GameObject Button;
public GameObject Target;
public GameObject loseObject;
public int amount;
public ButtonReposition script;
public void ChangeScene(int changeTheScene)   

{
    SceneManager.LoadScene(changeTheScene);
}

void Start()
{

}
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        amount += 1;
        Debug.Log(amount);
        if (amount == 10)
        {
            SceneManager.LoadScene(2);
            Destroy(Button);
        }
    }
}
}

2 个答案:

答案 0 :(得分:1)

在其他方面要做到这一点,你必须找到一种方法来确定moue按钮何时关闭并单击按钮。你现在不是那样做的。你现在正在做的是检查用if (Input.GetMouseButtonDown(0))点击鼠标左键时的按钮。

这是其中一种情况,使用Image组件比使用Button组件更好。除非您确实需要Button组件,否则应使用Image组件。

可以使用IPointerDownHandlerIPointerUpHandler界面及其OnPointerDownOnPointerUp功能来完成此操作。

暂时停用您的ButtonReposition脚本。使用下面的脚本,看看它是否正在按预期执行。如果一切正常,您可以启用ButtonReposition脚本并删除其中不必要的内容。

将ButtonDetector附加到图像组件:

public class ButtonDetector : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public bool clicked = false;

    public void OnPointerDown(PointerEventData eventData)
    {
        clicked = true;
        //Debug.Log("Pointer Down!");
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        //Reset
        clicked = false;
        // Debug.Log("Pointer Up!");
    }

    // Use this for initialization
    void Start()
    {

    }
}

你的新Lose剧本:

public class Lose : MonoBehaviour
{
    public GameObject Button;
    public GameObject Target;
    public GameObject loseObject;


    public int missedAmount = 0;
    public int clickedAmount = 0;
    const int MISSED_MAX_AMOUNT = 10;

    //public ButtonReposition script;
    public void ChangeScene(int changeTheScene)

    {
        SceneManager.LoadScene(changeTheScene);
    }

    private ButtonDetector buttonImage;

    void Start()
    {
        GameObject obj = GameObject.Find("ButtonImage");
        buttonImage = obj.GetComponent<ButtonDetector>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (buttonImage.clicked)
            {

                Debug.Log("Mouse Clicked on Button!");
                clickedAmount++;
                //Reset missedAmount to 0
                missedAmount = 0;
            }
            else
            {
                Debug.LogWarning("Mouse Click on SOMETHING ELSE");
                missedAmount++;
            }

            if (missedAmount == 10)
            {
                Debug.LogWarning("GameOver!");
                Debug.LogWarning("Missed 10 times in a row!");
                SceneManager.LoadScene(2);
                //Destroy(buttonImage.gameObject);
            }
        }
    }
}

答案 1 :(得分:0)

我认为最简单的解决方法是确保在第一个脚本之后执行lostObject脚本。您可以使用脚本执行顺序执行此操作。如果你去编辑 - &gt;项目设置 - &gt;脚本执行顺序你可以添加你的lostObject脚本并在#34;默认&#34;下面绘制它。然后,您的其他脚本将首先执行,并将金额设置为0,如您所料。但是,在设置为0之后,loseObject仍然会增加1,所以你真正想做的是将数量设置为-1。