2015-01-05 2 views
0

Я пытаюсь преобразовать этот код из Js в C#, но у меня есть некоторые проблемы. Код - это создание сетки с массивами. Вот сценарий, отлично работает в Unityscript:Массивы C# Ошибка Unity3D

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]; 

Это говорит мне «Не удается неявно преобразовать тип с плавающей точкой„в целом“Явное преобразование существует (вы пропали без вести слепок?).» И я есть еще одна ошибка в этой строке:

block = Instantiate(steelblock,new Vector3(x,y,0), Quaternion.identity); 

Он говорит мне: «не удается неявно преобразовать тип UnityEngine.Object„в UnityEngine.Transform“явное преобразование существует (вы пропали без вести слепок?).» в моем C# сценарий.

Вы можете помочь с этим!

Заранее спасибо

ответ

0

Сообщение об ошибке компилятора действительно говорит вам, что это не так: тип 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); 
Смежные вопросы