【发布时间】:2017-05-04 19:10:46
【问题描述】:
好的,所以我有一个名为 info 的变量,它属于我自己的类,称为 Kingdom Perk。它包含有关您可以添加到您的王国的每个不同升级的信息,并通过设置函数传递给脚本,并且在该函数中,公共变量“info”被分配给传入的内容。
在更新函数中,如果我写:
Debug.Log("Perk Name: " + info.Name);
它告诉我“Cannon”或“Walls”等
但如果我尝试在按下按钮时运行的函数中访问它,它会告诉我“信息”为空。
设置函数总是在按钮按下函数之前运行,并且相同的全局变量在更新函数中起作用,因为它总是告诉我正确的事情,它只是在这个函数中被破坏了。
感谢任何帮助,如果您需要更多详细信息,请询问
谢谢
编辑:不同的全局变量也仅在此函数中显示为 null。
编辑 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);
}
}
}
【问题讨论】:
-
你能显示更多你的代码吗? IE。
info在哪里初始化,在哪里使用,在哪里声明?目前没有足够的上下文来确定根本原因。 -
好的,更新了,如果还有什么要告诉我
-
您必须调用
Setup(KingdomPerk data)函数并传入KingdomPerk的新实例才能初始化info。 -
那么“信息”如何在除此之外的所有其他功能中起作用?
-
抱歉,
info甚至不像您的标题和问题主体所说的那样是公共变量。它是一个私有变量。您可能正在访问另一个变量并认为它就是这个变量。