【发布时间】:2017-09-08 22:56:30
【问题描述】:
我正在使用 Unity 进行一些练习。我基本上想做的是使用 gameManager 脚本中的单例设计模式。我想提示玩家击中空间,每次得分增加,每次减少生命值,一旦生命值达到0并且立方体被破坏,金钱就会增加。我想我弄混了一些脚本分配,或者我不确定如何引用正确的游戏对象。无论出于何种原因,击中空间都不会增加得分或减少健康。
我收到了 3 个文本:分数、健康和金钱,以及场景中间的一个立方体,以及分配给它的脚本 DestroyBySpace。
我有一个 gameManager 空对象分配给 gameManager 脚本
这是游戏管理器的脚本:
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);
}
}
如果您能帮助我朝着正确的方向前进,我将不胜感激。
【问题讨论】:
标签: c# unity3d singleton instance destroy