我正在开发一款工厂建造游戏。当放置特定建筑物(例如销售矿石的市场和储存矿石的箱子)时,我需要访问GameManager
场景中的游戏对象。由于建筑物是预制件,因此我在放置时设置了变量。有时,看似随机地,变量不会被设置。代码BuildManager
如下。
GameObject Tower = Instantiate(towerToBuild, Camera.main.ScreenToWorldPoint(Input.mousePosition), Quaternion.identity);
if (towerToBuild == market)
{
MarketScript marketScript = towerToBuild.GetComponent<MarketScript>();
marketScript.gameManager_ = gameManager;
}
if (towerToBuild == chest)
{
StorageScript storageScript = towerToBuild.GetComponent<StorageScript>();
storageScript.gameManager_ = gameManager;
}
未设置的变量是gameManager_
我的存储和市场脚本中的变量。
代码大约有 80-90% 的时间是有效的。此外,在放置构建时,我在代码有效和无效时所做的操作没有任何不同。在我看来,这完全是随机的。
您正在修改塔预制件,而不是新创建的对象。这意味着
gameManager_
不会为给定类型创建的第一个对象设置变量,但会为第一个之后创建的每个副本设置变量。更改
towerToBuild.GetComponent(...)
为Tower.GetComponent(...)
,因为Tower
是包含新创建的 gameObject 的变量: