Unity(C#) - 公共变量不能在一个特定的函数中工作

时间:2017-05-04 19:10:47

标签: c# unity3d

好的,我有一个名为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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

已修复 - onclick事件引用了预制件上的脚本,而不是实例化的副本。