[英]How to debug why my Unity3D game does not increase score?
我正在與Unity一起練習。 我基本上想做的是使用gameManager腳本中的單例設計模式。 我想提示玩家擊中空格,使得分每次增加,每次降低生命值,並且當生命值達到0且魔方被破壞時金錢增加。 我想我有些腳本分配錯了,或者我不確定如何引用正確的游戲對象。 無論出於何種原因,擊中空格都不會增加得分或降低健康狀況。
我得到了3個文本:得分,健康狀況和金錢,以及場景中間的一個立方體,並為其分配了腳本DestroyBySpace。
我有一個分配給gameManager腳本的gameManager空對象
這是Game Manager的腳本:
private int currentScore;
private int currentHealth;
private int currentMoney;
public Text scoreText;
public Text healthText;
public Text moneyText;
public static GameManager instance;
void Start()
{
currentScore = 0;
currentHealth = 20;
currentMoney = 0;
updateScore();
updateMoney();
updateHealth();
}
void Awake()
{
instance = this;
}
public void adjustScore(int newScore)
{
currentScore += newScore;
updateScore();
}
public void adjustHealthAndMoney(int newHealth, int newMoney)
{
currentHealth -= newHealth;
updateHealth();
if (currentHealth == 0)
{
currentMoney += newMoney;
updateMoney();
Destroy(gameObject);
}
}
void updateScore()
{
scoreText.text = "Score: " + currentScore;
}
void updateHealth()
{
healthText.text = "Health: " + currentHealth;
}
void updateMoney()
{
moneyText.text = "Money: " + currentMoney;
}
這是我的DestroyBySpace腳本:
public int scoreValue;
public int healthValue;
public int moneyValue;
public GameObject target;
public GameManager gameManager;
void Start()
{
GameObject gameManagerObject = GameObject.FindWithTag("GameManager");
if (gameManagerObject != null)
{
gameManager = gameManagerObject.GetComponent<GameManager>();
}
if (gameManager == null)
{
Debug.Log("Cannot find Game Manager script");
}
}
void onTriggerEnter()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameManager.instance.adjustHealthAndMoney(healthValue,moneyValue);
GameManager.instance.adjustScore(scoreValue);
}
}
如果您能引導我朝正確的方向發展,我將不勝感激。
我認為您已經混淆了onTriggerEnter()
行為。
當另一個GameObject進入腳本附加到的onTriggerEnter()
的碰撞器時,將調用onTriggerEnter()
。 這里不是檢查鍵盤按鍵的地方。
您可能要使用的是Update()
行為。 它每幀運行一次,因此可以確保如果用戶按下某個鍵,該功能將能夠看到它。
您的代碼如下所示:
void Update(){
if (Input.GetKeyDown(KeyCode.Space))
{
GameManager.instance.adjustHealthAndMoney(healthValue,moneyValue);
GameManager.instance.adjustScore(scoreValue);
}
}
另外,我認為您在gameManager
腳本中執行Destroy(gameObject)
時誤解了gameObject
指的是什么。 gameObject
指的是附加了腳本的gameObject。 這意味着當您在gameManager
腳本中執行Destroy(gameObject)
,您將銷毀其附加到gameManager
腳本的對象。
要擺脫稱為目標的GameObject,您需要訪問它。 您可以通過以下幾種方法來做到這一點:
1)Destroy(GameObject.Find(“ target”));
這將直接搜索稱為“目標”的GameObject並將其銷毀。 不利的一面是,它要求將GameObject精確地稱為“目標”,如果有多個稱為“ target”的GameObject,則只會銷毀第一個。
2)創建一個公共變量(如public GameObject target
),並通過檢查器將目標的物理實例存儲在其中。 然后,當您想銷毀它時,只需執行Destroy(target)
;
這就是我最有可能這樣做的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.