我正在尝试将此代码从Js转换为C#,但遇到了一些麻烦。该代码是关于使用数组创建网格的。这是脚本,在Unityscript中可以正常工作:
var levelArray : int[,]; var levelSize : Vector2 = new Vector2(19,13);
var steelblock : Transform;
function Start ()
{
SetupLevel();
}
function SetupLevel()
{
levelSize.x = Mathf.FloorToInt( levelSize.x );
levelSize.y = Mathf.FloorToInt( levelSize.y );
levelArray = new int[ levelSize.x, levelSize.y];
var block : Transform;
for( var y : int = 0; y < levelSize.y ; y++)
{
for(var x : int = 0 ; x < levelSize.x ; x++)
{
if(x == 0 || x == levelSize.x - 1 ||y ==0 || y == levelSize.y -1)
{
levelArray[ x , y ] = 2;
block = Instantiate(steelblock,Vector3(x,y,0), Quaternion.identity);
block.name = "steel_"+x.ToString() + "_"+ y.ToString();
block.parent = transform;
}
else if(x% 2 == 0 && y %2 ==0)
{
levelArray[ x , y ] = 2;
block = Instantiate(steelblock,Vector3(x,y,0), Quaternion.identity);
block.name = "steel_"+x.ToString() + "_"+ y.ToString();
block.parent = transform;
}
}
}
}
试图将此代码从Javascript转换为C#,但出现了一些错误。
using System.Collections.Generic;
public class NewBehaviourScript : MonoBehaviour
{
int[,] levelArray ;
Vector2 levelSize = new Vector2(19,13);
Transform steelblock;
// Use this for initialization
void Start ()
{
SetupLevel ();
}
void SetupLevel()
{
levelSize.x = Mathf.FloorToInt( levelSize.x );
levelSize.y = Mathf.FloorToInt( levelSize.y );
levelArray = new int[ levelSize.x, levelSize.y];
Transform block ;
for( int y = 0; y < levelSize.y ; y++)
{
for(int x = 0 ; x < levelSize.x ; x++)
{
if(x == 0 || x == levelSize.x - 1 ||y ==0 || y == levelSize.y -1)
{
levelArray[ x , y ] = 2;
block = Instantiate(steelblock,new Vector3(x,y,0), Quaternion.identity);
block.name = "steel_"+x.ToString() + "_"+ y.ToString();
block.parent = transform;
}
else if(x% 2 == 0 && y %2 ==0)
{
levelArray[ x , y ] = 2;
block = Instantiate(steelblock,new Vector3(x,y,0), Quaternion.identity);
block.name = "steel_"+x.ToString() + "_"+ y.ToString();
block.parent = transform;
}
}
}
}
}
错误在此行中:
levelArray = new int[ levelSize.x, levelSize.y];
它告诉我“无法将类型float'隐式转换为int。存在显式转换(是否缺少转换?),并且在此行中还有另一个错误:
block = Instantiate(steelblock,new Vector3(x,y,0), Quaternion.identity);
它告诉我“无法将类型UnityEngine.Object'隐式转换为UnityEngine.Transform'。存在显式转换(是否缺少转换?)”在我的C#脚本中。
你能帮忙吗?
提前致谢
最佳答案
编译器错误消息确实告诉您什么地方不对:levelSize的类型为Vector2
。属性X
和Y
的类型为float
,而不是int
。另一个问题是类似的类型:编译器无法转换不同的UnityEngine
类型,因此您需要自己执行此操作。
将特定的代码行更改为如下所示。这不是最好的方法,也没有经过测试,但这可能有效:
levelArray = new int[Convert.ToInt32(levelSize.x), Convert.ToInt32(levelSize.y)];
和
block = Instantiate(steelblock as UnityEngine.Transform, new Vector3(x,y,0), Quaternion.identity);
关于c# - 数组C#错误Unity3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27772132/