2017-10-10 16 views
0

我試圖在使用x和y循環放置它們之後保存已放置圖塊的座標。我想要做的是獲取這些瓷磚的座標,並將它們放置在二維數組中,或將它們保存在某個位置,以便在水平面加載瓷磚時,這些瓷磚的座標將被保存,以後我可以使用它們。我正在嘗試將這些積分用於玩家,所以他可以一次一個點地從一個點到另一個點。在2d vector3數組中保存xy座標,然後將結果打印到控制檯C#Unity

我不知道我是否正確地進行了操作,並希望能夠在控制檯中打印座標以查看它們是否已保存。

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class MapGenerator : MonoBehaviour 
{ 
    public Transform tilePrefab; 
    public Vector2 mapSize; 

    [Range(0, 1)] 
    public float tileOutline; 
    public float[] tilePointX; 
    public Vector3[,] positionArray; 
    public Vector3 tilePosition; 

    void Start() 
    { 

     MapGeneratorMethod(); 

    } 

    public void MapGeneratorMethod() 
    { 
     for (int x = 0; x < mapSize.x; x++) 
     { 
      for (int y = 0; y < mapSize.y; y++) 
      { 
       Debug.Log("TEST"); 
       tilePosition = new Vector3(-mapSize.x/2 + 0.5f + x, 0, -mapSize.y/2 + 0.5f + y); 
       //getposition of tile = position array 
       Transform newTile = Instantiate(tilePrefab, tilePosition, Quaternion.Euler(Vector3.right * 90)) as Transform; 
       newTile.localScale = Vector3.one * (1 - tileOutline); 

      } 
     } 

    } 

    public void findTilePoint() 
    { 
     for (int x = 0; x < mapSize.x; x++) 
     { 
      for (int y = 0; y < mapSize.y; y++) 
      { 
       tilePosition = new Vector3(-mapSize.x/2 + 0.5f + x, 0, -mapSize.y/2 + 0.5f + y); 
       positionArray[x,y] = tilePosition; 
       Debug.Log(x); 

      } 
     } 
     // Debug.Log(x); 
    } 
} 

回答

0

我會建議你在一個稍微不同的方式做到這一點,而不是存儲在一個二維數組瓷磚的位置我會在一個二維數組到瓷磚的變換門店引用。即

public float tileOutline; 
public float[] tilePointX; 
public Transform[,] tilesArray; 
public Vector3 tilePosition; 

void Start() 
{ 

    MapGeneratorMethod(); 

} 

public void MapGeneratorMethod() 
{ 
    tilesArray = new transform[mapSize.x, mapSize.y]; 

    for (int x = 0; x < mapSize.x; x++) 
    { 
     for (int y = 0; y < mapSize.y; y++) 
     { 
      Debug.Log("TEST"); 
      tilePosition = new Vector3(-mapSize.x/2 + 0.5f + x, 0, -mapSize.y/2 + 0.5f + y); 
      //getposition of tile = position array 
      Transform newTile = Instantiate(tilePrefab, tilePosition, Quaternion.Euler(Vector3.right * 90)) as Transform; 
      newTile.localScale = Vector3.one * (1 - tileOutline); 


      tilesArray[x,y] = newTile; 
     } 
    } 

通過做這種方式,你仍然能夠獲得使用tilesArray[x,y].GetPosition()瓷磚的位置,但你也將能夠獲得連接,當您需要瓷磚的任何部件。還請注意,我添加了行

tilesArray = new transform[mapSize.x, mapSize.y]; 

在函數的開頭。你應該在使用之前真正地初始化這個數組。作爲最後一點,您可以將vector2或vector3直接傳遞給debug.log,如下所示。

public void findTilePoint() 
{ 
    for (int x = 0; x < mapSize.x; x++) 
    { 
     for (int y = 0; y < mapSize.y; y++) 
     { 
      vector3 tilePosition = tilesArray[x,y].GetPosition() 
      Debug.Log(tilePosition); 

     } 
    } 
    // Debug.Log(x); 
} 
+0

謝謝邪惡的羊!非常感激! –

相關問題