2017-10-10 1 views
0

Ich versuche, die Koordinaten der platzierten Kacheln zu speichern, nachdem ich eine X- und Y-Schleife verwenden, um sie zu platzieren. Was ich tun möchte, ist, die Koordinaten dieser Kacheln zu nehmen und sie in ein 2D-Array zu legen oder sie irgendwo zu speichern, so dass die Koordinaten dieser Kacheln gespeichert werden, wenn die Ebene mit den Kacheln geladen wird, und ich sie später verwenden kann . Ich versuche, diese Punkte für den Spieler zu verwenden, damit er von Punkt zu Punkt, Schritt für Schritt, reisen kann.Speichern einer XY-Koordinaten in einem 2D-Vektor3-Array und dann Drucken der Ergebnisse auf der Konsole C# Unity

Ich bin mir nicht sicher, ob ich es richtig mache und möchte die Koordinaten in der Konsole drucken, um zu sehen, ob sie gespeichert wurden.

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); 
    } 
} 

Antwort

0

Ich würde Ihnen empfehlen, dies zu tun in einer etwas anderen Weise, statt die Positionen der Kacheln in einem 2D-Array zu speichern würde ich speichert Verweise auf die Transformationen der Kacheln in einem 2D-Array. das heißt

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

Durch es auf diese Weise tun Sie noch in der Lage sind, die Position der Fliesen zu bekommen mit tilesArray[x,y].GetPosition() aber Sie werden auch in der Lage auf die Fliese verbunden jede Komponente zu erhalten, wann immer Sie brauchen. Beachten Sie auch, dass ich die Zeile

am Anfang der Funktion hinzugefügt habe. Sie sollten das Array auf diese Weise initialisieren, bevor Sie es verwenden. Als letzte Anmerkung können Sie ein vector2 oder vector3 wie folgt direkt an das debug.log übergeben.

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

Danke unheilige Schafe! Sehr geschätzt! –

Verwandte Themen