0
好吧,所以我有一個變量稱爲信息,這是我自己的類名爲Kingdom Perk。它包含有關每個不同升級的信息,您可以將其添加到您的王國,並通過設置功能將其傳遞給腳本,並在該功能中將公共變量「信息」分配給傳入的內容。統一(C#) - 公共變量將不能在一個特定的功能
在更新函數,如果我寫:
Debug.Log("Perk Name: " + info.Name);
它告訴我「大炮」或「牆」等
但是,如果我嘗試訪問它時,按下按鈕時運行的函數,它告訴我, 「信息」爲空。
設置功能總是在按鈕按下功能之前運行,並且相同的全局變量在更新功能中工作,因爲它總是告訴我正確的事情,它只在這個功能中被破壞。
讚賞任何幫助,詢問你是否需要更詳細
感謝
編輯:不同的全局變量也顯示了該功能。爲空。
編輯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'被初始化,它在哪裏被使用,它在哪裏被聲明?目前沒有足夠的背景來確定根本原因。 – Serlite
確定已更新它,如果還有其他內容讓我知道 –
您必須調用您的'Setup(KingdomPerk data)'函數並傳入'KingdomPerk'的新實例以初始化'info'。 – Programmer