強火で進め

このブログではプログラム関連の記事を中心に書いてます。

JavaScriptで2次元配列を使う方法

UnityのJavaScriptで2次元配列を使う場合はこの様な記述を行います。

	var num = [
		[1, 3, 5, 7, 9],
		[2, 4, 6],
		[-1, 2, -3, 4]
	];

動的に作成したい場合にはこの様な記述になります。

	var num2 = new Array();
	num2[0] = [1, 3, 5, 7, 9];
	num2[1] = [2, 4, 6];
	num2[2] = [-1, 2, -3, 4];

この2つの記述でほぼ同じ動作になるのですが型は厳密には異なっています。
これは Debug.Log() でそれぞれの変数を確認すると分かります。

num は

System.Int32[][]

num2 は以下の様な結果になります。

System.Int32[],System.Int32[],System.Int32[]

num2 の場合も num と完全に同じ型にしたい場合は Unify Community Wiki にて公開されている。 MultiDim というプログラムを使用する事で実現可能です。

JavascriptMultiDimArrays - Unify Community Wiki
http://www.unifycommunity.com/wiki/index.php?title=JavascriptMultiDimArrays

基本的には「C# - MultiDim.cs」の所に記述されているコードをC#のファイルで作成すればOKです。

しかし、配置する位置によっては以下の様なエラーが発生します。

Assets/sample.js(16,20): BCE0005: Unknown identifier: 'MultiDim'.

これはCSファイル(MultiDim.cs)のコンパイルが先に行われていない為にJSファイルから使用できない様です。

この症状は MultiDim.cs を Standard Assets フォルダに配置する事で回避出来ます。

MultiDimクラスはこの様に使います。

	var num3 = MultiDim.JaggedInt(3);
	num3[0] = [1, 3, 5, 7, 9];
	num3[1] = [2, 4, 6];
	num3[2] = [-1, 2, -3, 4];

この記述であれば num と全く同じ型になります。