在我的脚本中,每当您点击"按钮"它会为你的分数增加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);
}
}
}
}
答案 0 :(得分:1)
在其他方面要做到这一点,你必须找到一种方法来确定moue按钮何时关闭并单击按钮。你现在不是那样做的。你现在正在做的是检查用if (Input.GetMouseButtonDown(0))
点击鼠标左键时的按钮。
这是其中一种情况,使用Image
组件比使用Button
组件更好。除非您确实需要Button组件,否则应使用Image
组件。
可以使用IPointerDownHandler
,IPointerUpHandler
界面及其OnPointerDown
和OnPointerUp
功能来完成此操作。
暂时停用您的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。