c# - 数组C#错误Unity3D

标签 c# arrays unity3d compiler-errors unityscript

我正在尝试将此代码从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。属性XY的类型为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/

相关文章:

c# - 亚马逊商品广告 API ItemSearchRequest

c# - 在 WPF 中绘制 tile-map 的最简单方法

arrays - 总和等于键的数组的最小子集。条件 : Values can be used any number of times

java - 如何创建在代数表达式中使用其他数组的数组?

arrays - 从正则表达式结果中删除大括号

c# - 场景变化时鉴权失败

c# - 如何从具有 n 个子项/子项等的 CustomObject 中获取所有子对象

c# - 将 IDataErrorInfo 与嵌套对象一起使用

unity3d - 统一的 NavMeshAgent 不起作用

c# - 让 child 不受 parent 轮换的影响 Unity