统一需要一个 public class 但被迫添加静态

Need a public class in unity but forced to add static

我想通过将变量编写为 public var 来使它在 unity inspector 中可编辑 - 例如, public int days = 3 - 然后有另一个使用 days 的私有变量(并将用户友好的输入转换为现在对我的代码有用的数字),例如 private int hours = days * 24。但是,我不得不将 days 设为 public static int,以便通过 hours 等式访问它。这意味着它不再可用于在检查器中进行更改。我认为,这是我对 c# 理解的一个基本问题,任何关于我应该做什么的提示都会真正帮助初学者。

public int days = 3;
private int hours = days * 24;

谢谢!

如果能提供一个完整的脚本示例就更好了。 通过仔细阅读你的问题,这就是你目前正在做的事情:

public int days = 3;
private int hours = days * 24;

在函数中初始化 hours 变量,应该没问题。 StartAwake 函数通常用于这样的事情:

public int days = 3;
private int hours;

void Start()
{
    hours = days * 24;
}

这是因为要用另一个变量初始化一个变量,你用来初始化另一个的变量必须是staticconst变量。

这个 const 的例子也可以工作:

public const int days = 3;
public int hours = days * 24;

我认为这里的关键是 C# 需要知道什么时候实际 运行 你的 days * 24 行。假设您启动游戏,然后打开检查器并更改 days 的值 - 您可能也希望更改小时数以反映这一点。

最简单的方法是在需要时 运行 它 - 即当您需要 'Hours' 的值时,那就是 运行 [=11] =].最好使用 C# 属性:

public int Days = 3;

public int Hours{
    get {
        return Days * 24;
    }
}

现在您可以像使用字段一样使用 Hours,无论您何时更改 'Days' 字段,它始终是正确的小时数,因为它会计算它为您点播