【发布时间】:2020-03-28 16:33:00
【问题描述】:
这是触摸动作的脚本,主游戏就在上面
var addingGoldPerSec = new GameObject();
var buttonInstance = addingGoldPerSec.AddComponent<ItemButton>();
StartCoroutine(buttonInstance.addGoldLoop());
这是我有协程的地方
public double goldPerSec
{
get
{
if (!PlayerPrefs.HasKey("_goldPerSec"))
{
return 0;
}
string tmpStartGoldPerSec = PlayerPrefs.GetString("_goldPerSec");
return double.Parse(tmpStartGoldPerSec);
}
set
{
PlayerPrefs.SetString("_goldPerSec", value.ToString());
}
}
public void updateUI()
{
priceDisplayer.text = LargeNumber.ToString(currentCostPerSec).ToString();
coinDisplayer.text = "PER SEC\n" + LargeNumber.ToString(goldPerSec).ToString();
levelDisplayer.text = "LEVEL\n" + level + "/150".ToString();
}
public IEnumerator addGoldLoop()
{
while (DataController.Instance.gold <= 1e36)
{
DataController.Instance.gold += goldPerSec;
if (Gameplay.Instance.booster == 1)
{
yield return new WaitForSeconds(0.25f);
}
else if (Gameplay.Instance.booster == 0)
{
yield return new WaitForSeconds(1.0f);
}
}
}
这是我管理存储在 PlayerPrefs 中的数据的第三个脚本
public void loadItemButton(ItemButton itemButton)
{
itemButton.level = PlayerPrefs.GetInt("_level",1);
PlayerPrefs.GetString("_costPerSec", itemButton.currentCostPerSec.ToString());
PlayerPrefs.GetString("_goldPerSec",itemButton.goldPerSec.ToString());
}
public void saveItemButton(ItemButton itemButton)
{
PlayerPrefs.SetInt("_level", itemButton.level);
PlayerPrefs.SetString("_costPerSec", itemButton.currentCostPerSec.ToString());
PlayerPrefs.SetString("_goldPerSec", itemButton.goldPerSec.ToString());
}
我有第二个脚本,它是一个附加到几个游戏对象的协程,其中存在一个升级按钮,每次升级都会增加你赚取的秒数,这里的主要问题是协程在我触摸屏幕后就停止了,所以我在主脚本中编写了另一个代码,这样协程即使在触摸屏幕后也能继续工作,所以我编写了一个脚本,游戏对象在哪里,但它只是抛出 NullReferenceException,尝试使用 TryCatch 进行检查并抛出问题来自我在主脚本上创建的游戏对象,但如果这样我需要附加到主脚本存在的主对象,比如存在协同程序的 10 多个游戏对象,我认为单例不是方式,它通过在 Awake 上实例化删除了我上面的所有信息,我从没想过制作静态,所以我按照你告诉我的做了,我需要更改几乎我的代码,每个文本都附加到每个游戏对象中,以制作一个非静态成员与静态成员一起工作需要删除 Monobehaviour 但这只会让游戏爆炸,感谢您的帮助。
【问题讨论】:
-
脚本链接到游戏对象?