【问题标题】:Making a 2D Array in UnityScript by making an array of arrays通过制作数组数组在 UnityScript 中制作 2D 数组
【发布时间】:2016-02-06 12:41:17
【问题描述】:

所以我在 Unity 3D 中使用 UnityScript 尝试使用元胞自动机制作洞穴生成器。这是我的问题,我创建了两个变量,宽度和高度,它们需要是我的二维数组的大小。我还创建了一个函数来在启动时生成地图,因此需要在启动时初始化数组。我知道我需要使用.length 和其中一个变量的某种for 循环,但我不完全确定如何执行此操作。任何帮助都会很棒!

【问题讨论】:

  • 发布您的代码,我们会提供帮助
  • 我发现使用一维数组并对其进行二维寻址通常更容易(在 JS 中,计算坐标)。
  • 将对 JavaScript 的引用更改为 UnityScript,因为它在技术上就是这样。 wiki.unity3d.com/index.php/UnityScript_versus_JavaScript

标签: arrays multidimensional-array unity3d unityscript cellular-automata


【解决方案1】:

如果二维数组中的所有行的长度都相同,则无需编写循环,只需检查任意行的长度即可,即

var arr = [
  [1, 2, 3],
  [1, 2, 3],
  [1, 2, 3],
  [1, 2, 3],
];
var height = arr.length; //4
var width = arr[0].length; //3

你需要循环的一个例子是,如果所有的宽度都是不同的长度,即

var arr = [
  [1, 2, 3],
  [1, 2, 3, 4]
];

var widths = [];
for (var i = 0; i < arr.length; i++) {
  widths.push(arr[i].length);
}
console.log(widths); // [3, 4]

这是在给定高度和宽度的情况下生成二维数组的方法

var height = 5,
width = 4;

var arr = [];
for (var i = 0; i < height; i++) {
  arr[i] = [];
  for (var j = 0; j < width; j++) {
    arr[i][j] = "x";
  }
}
console.log(arr);

// [ [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ],
//   [ 'x', 'x', 'x', 'x' ] ]

【讨论】:

  • 数组的长度和宽度由变量决定,所以我认为不使用循环就无法实例化这个数组。例如,我的数组的长度可能在 10-100 之间,具体取决于生成的方式,因此该变量需要是数组的长度。之后,我需要使第一个数组中的每个值都有一个数组,其大小等于第二个变量。直到我运行代码之后才知道长度和高度。这就是为什么我认为我需要使用循环来制作数组。感谢您花时间查看!
  • 我将我的问题编辑为我认为可以回答您的问题的内容。如果这仍然没有帮助,请发布您的代码示例。
  • 感谢罗伯特的帮助!
【解决方案2】:

嗯,在 Unity 中,您只需像这样初始化它们:

int gridSpace[,];
public int height;
public int width;

void Start()
{
   gridSpace = new int[height,width];
   MakeMapStuffHappen();
}

这将允许您在编辑器中(或以编程方式)指定高度和宽度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2015-08-03
    • 2015-10-26
    • 2023-03-28
    • 1970-01-01
    • 2011-06-14
    • 2017-08-18
    相关资源
    最近更新 更多