今天遇到这问题,看到这贴子有误导性。。。
这里总结下
先说下,unity的js和网页上开发用的JavaScript还是有些区别的
只说js的二维数组的话,lz和ls的几位说得都没错,创建和赋值,a[i][j]这种结构是对的
但unity的js是不能创建二维数组的,或者说创建第二维时不能序列化。
先看看unity的API文档的解释:
Unity doesn't support serialization of a List of Lists, nor an Array of Arrays.
上面这句话直接翻译:
Unity不支持一个列表的列表序列化,也不支持一个数组的数组序列化。
现在看LZ的例子,先var a : Array();创建的是一个一维数组,后面的a[i] = new Array();相当于将前面的一维数组每个元素都序列化为一个新的数组,从而构成二维数组,但是unity又不支持对数组的序列化,于是这句a[i] = new Array();其实已经创建失败了,但是unity并没有在此报错,看来序列化失败并没有抛出异常,但是对于a[i] 来说,执行完这句,依然是个Object类型,而非Array,于是后面的只要出现a[i][j]这种结构就会报Type 'Object' does not support slicing.的错误。
另外要说的是,API文档的解释并没有指明js还是C#,所以,C#发生这种序列化的情况也会出错。
不过C#的二维数组,[i,j]这种结构是可以用的,它不是对数组的数组序列化,所以可以通过C#来定义一个专门处理js二维数组的类,用一个静态函数来返回二维数组,具体看这个
http://blog.csdn.net/jbjwpzyl3611421/article/details/11113529,这里最后部分说了方法。
令人奇怪的是,unity的js虽然不能成功创建二维数组,但是可以直接用已经存在的二维数组。。。