この単純化されたコードを unityscript から C# に変換 (および理解) しようとしています。
private var actionList = new Array();
function Start()
{
actionList = new Array(12);
for(i=0; i<actionList.length; i++)
actionList[i] = new Array(4);
for(i=0; i<actionList.length; i++)
{
actionList[i][1] = Rect(50+(i*55),50, 50, 50);
actionList[i][2] = new Array("action");
}
actionList[0][3] = KeyCode.Alpha1;
actionList[1][3] = KeyCode.Alpha2;
actionList[2][3] = KeyCode.Alpha3;
actionList[3][3] = KeyCode.Alpha4;
actionList[4][3] = KeyCode.Alpha5;
actionList[5][3] = KeyCode.Alpha6;
actionList[6][3] = KeyCode.Alpha7;
actionList[7][3] = KeyCode.Alpha8;
actionList[8][3] = KeyCode.Alpha9;
actionList[9][3] = KeyCode.Alpha0;
actionList[10][3] = KeyCode.Minus;
actionList[11][3] = KeyCode.Equals;
}
function OnGUI()
{
for(i=0; i<actionList.length; i++)
{
if(actionList[i][1] != null)
drawButton(actionList[i][1]);
}
}
function drawButton(rect)
{
GUI.Button(rect, "Hello");
}
完全なコードはここにあります:ドラッグ アンド ドロップ スペル バーの作成
C#でこれを試してみました(キーマッピングは省略しています):
using UnityEngine;
using System.Collections.Generic;
public class SpellBar : MonoBehaviour
{
private object[][] actionList;
void Start()
{
actionList = new object[12][];
for (int i=0; i<actionList.Length; i++)
actionList[i] = new object[4];
for (int i=0; i<actionList.Length; i++)
{
actionList[i][1] = new Rect(50+(i*55), 50, 50, 50);
}
//Keymappings
}
void OnGUI()
{
for(int i=0; i<actionList.Length; i++)
{
if(actionList[i][1] != null)
DrawButton(actionList[i][1]);
}
}
void DrawButton(Rect rect)
{
GUI.Button(rect,"Hello");
}
}
ここで得られるエラーは、DrawButton(actionList i ) を使用するときに OnGui にあります。エラー: 「オブジェクト」式を「UnityEngine,Rect」型に変換できません。
私は unityscript または C# の経験豊富なプログラマーではありません。Lists、ArrayListsなどを試して、Googleを何時間も検索しましたが、解決策が見つかりません。事前にthnx!
EDIT 27-11-2012
それで、私は新しい関連する問題に遭遇しました。ここでこれを編集する必要があるかどうかわかりませんが、返信で適切にフォーマットできませんでした。
変換しようとしている JavaScript コードでは、次のコードを使用してクラスを配列に格納します。
var openSlot = getNextSlot(actionList);
if(openSlot != -1)
actionList[openSlot][0] = new classEvilSmile();
これはまさに私が望む方法ではありませんが、メソッドを配列に格納できるようにしたいのですが、C# でそれを行う方法が見つかりません。それは単に不可能ですか?
(例) 私はこのようなことをしようとしています:
//In addition to what I posted above
void Start()
{
actionList[i][0] = void FireBall();
}
void FireBall()
{
Texture2D icon = Resources.Load("icon_fireball") as Texture2D;
String description = new String("Shoot a ball of fire");
//etc
}