【问题标题】:Unity Static member `UpgradeManager.tickValue' cannot be accessed with an instance reference, qualify it with a type name insteadUnity 静态成员“UpgradeManager.tickValue”不能通过实例引用访问,而是用类型名称限定它
【发布时间】:2016-10-12 13:31:22
【问题描述】:

如果tickValue 是静态的,我怎样才能保持这样的结构?

public float GetMoneyPerSec()
{
    float tick = 0;
    foreach (UpgradeManager item in items)
    {
        tick += item.tickValue;
    }
    return tick;
}

【问题讨论】:

    标签: unity3d static structure


    【解决方案1】:

    此错误表示您的UpgradeManager 如下所示

    public class UpgradeManager 
    {
        public static float tickValue;
    }
    

    删除 static 关键字,它将在您的问题中使用。

    如果你想在静态上下文中使用它,你需要按如下方式访问它,但是你不能在实例化对象中使用它(new UpgradeManager() 创建一个实例)

    UpgradeManager.tickValue
    

    所以在你的例子中使用它。

    public float GetMoneyPerSec()
    {
        float tick = UpgradeManager.tickValue;
        // it cannot be used in a for-loop with each instance referencing it, static is a global, single value.
        return tick;
    }
    

    但你可能想做的是这个

    public float GetMoneyPerSec()
    {
        float tick = UpgradeManager.tickValue / items.length;
        // it cannot be used in a for-loop with each instance referencing it, static is a global, single value.
        return tick;
    }
    

    【讨论】:

    • 我知道它看起来像那样,但我怎么能改变它来工作呢? /我不想从静态改变它。
    • 问题是,我希望它是静态的以保存它。但如果它不是静态的,那么我不能在我的保存脚本中引用它。
    • 为什么你需要它是静态的来保存它?不可能有基于实例的静态变量。如果你需要这样做,那么你可能有奇怪的保存逻辑,应该发布一个新问题以寻求帮助
    • 类型 UpgradeManager[]' does not contain a definition for length' 并且找不到扩展方法 length' of type UpgradeManager[]' (您是否缺少 using 指令或程序集引用?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多