2015-01-05 43 views
0

我試圖將這段代碼從Js轉換爲C#但我有一些麻煩。代碼是關於創建與陣列gride。這裏是腳本,在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]; 

它告訴我「無法隱式轉換浮點型‘爲int’的顯式轉換存在(是否缺少強制轉換?)。」和我還有一個錯誤在這行:

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

它告訴我「無法隱式轉換類型UnityEngine.Object‘到UnityEngine.Transform’的顯式轉換存在(是否缺少強制轉換?)。」在我的C#腳本。

你能幫忙嗎?

在此先感謝

回答

0

的編譯器錯誤消息真的告訴你什麼是錯的: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);