如何指定动态默认值

Web*_*net 3 c# unity-game-engine

这里是C#的新手......试图弄清楚下面new GameObject[20, 20]如何实际引用私有属性值而不是硬编码值.

private int xRadius = 20;
private int yRadius = 20;

private GameObject [,] grid = new GameObject[20, 20];
Run Code Online (Sandbox Code Playgroud)

我尝试了变化this.xRadiusself.xRadius没有运气.我怎样才能做到这一点?

six*_*nes 5

您不能this在类的变量声明范围中使用,因为在那个时刻xRadius之前没有理由进行定义grid.

你可以通过声明xRadiusyRadius常量来实现你想要的(常量是在运行时不会改变的不可变变量);

private const xRadius = 20;
private const yRadius = 20;

private GameObject[,] grid = new GameObject[xRadius, yRadius];
Run Code Online (Sandbox Code Playgroud)

或者将它们标记为静态变量(静态变量存在于任何类实例之外,并且在任何类实例消失后都可用);

class Example {
    private static xRadius = 20;
    private static yRadius = 20;

    private GameObject[,] grid = new GameObject[Example.xRadius, Example.yRadius];
Run Code Online (Sandbox Code Playgroud)

或者您可以在类构造函数中定义网格并使用普通的类变量引用;

class Example {
    public Example() {
        this.grid = new GameObject[this.xRadius, this.yRadius];
    }
}
Run Code Online (Sandbox Code Playgroud)

最快的解决方案(在运行时资源使用量较少)正在使用,constants因为值将在编译时复制,并且它们不会占用任何额外资源,最动态的解决方案是在构造函数中或在访问网格对象之前设置它们这将允许您在运行时更改xRadius并使用相同的半径变量yRadius重新初始化grid变量.