好的,我有一个名为info的变量,这个变量属于我自己的类,名为Kingdom Perk。它包含有关您可以添加到您的王国的每个不同升级的信息,并通过设置函数传递给脚本,并在该函数中公共变量" info"被分配到什么传递。
在更新功能中,如果我写:
Debug.Log("Perk Name: " + info.Name);
它告诉我" Cannon"或者" Walls" e.t.c
但是如果我尝试在按下按钮时运行的功能中访问它,它会告诉我" info"是空的。
设置功能总是在按下按钮功能之前运行,并且相同的全局变量在更新功能中起作用,因为它总是告诉我正确的事情,它只在此功能中被破坏。
任何帮助表示感谢,询问您是否需要更多详细信息
由于
编辑:另一个全局变量也仅在此函数中显示为空。
编辑2:
private KingdomPerk info;
public void Setup(KingdomPerk data)
{
info = data;
perkName.text = data.Name;
perkType.text = "Type: " + data.Type.ToString();
perkHealth.text = "Health: " + data.Health.ToString() + "HP";
perkUpgradeCost.text = "Upgrade Cost: " + data.UpgradeCost.ToString();
perkImage.sprite = data.Sprite;
}
public void UpgradeButtonPressed()
{
float money = FindObjectOfType<MapGenerator>().worldInfo.money;
if (money >= info.UpgradeCost && info.Level != info.MaxUpgradeLevel)
{
Debug.Log("We've got enough!");
money -= info.UpgradeCost;
info.DamagePerShot *= info.DamageMultiplier;
info.Health *= info.HealthMultiplier;
info.Level++;
info.UpgradeCost *= info.CostMultiplier;
info.FireRate *= info.FireRateMultiplier;
RefreshInfo();
}
else if (money < info.UpgradeCost)
Debug.Log("Get more money!");
else if (info.Level == info.MaxUpgradeLevel)
Debug.Log("Already max level!");
}
此处调用安装程序,使用不同的脚本:
void RefreshListItems()
{
ClearListItems();
for (var i = 0; i < perks.Count; i++)
{
if (perks[i].UnlockLevel <= FindObjectOfType<MapGenerator>().worldInfo.playerLevel)
{
GameObject perkObject = Instantiate(itemPrefab);
perkObject.transform.SetParent(scrollViewTransform);
PerkListItem perkItem = perkObject.GetComponent<PerkListItem>();
perkItem.Setup(perks[i]);
upgradeGOList.Add(perkObject);
}
}
}
答案 0 :(得分:0)
已修复 - onclick事件引用了预制件上的脚本,而不是实例化的副本。