我正在尝试将这段简化的代码从 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 等,但找不到解决方案。提前谢谢!
编辑 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
}