Jump to content
Unity Insider Forum

Nochmal das Koordinatenproblem


SyntaxTalkstoMe

Recommended Posts

Hallo,

ich sitze jetzt schon seit fast 2 Tagen an dem Problem. Ich finde einfach nicht den Denkfehler.

Ich will es nochmal schildern, da ich bemerkt habe, dass ich im letzten Thread die Sachlage etwas ungenau geschildert habe.

 

Mein Ziel ist es, sobald ein gewisser Punkt überschritten wurde, dass ein neuer Raumabschnitt erstellt wird. Das Problem ist dabei, dass er nicht genau dort erstellt wird, damit es nahtlos weitergeht. Die Höhe des Raumes passt auch nicht, aber das hat vermutlich den gleichen Grund.

Ich habe drauf geachtet, dass die leeren GameObjects Positionen alle bei 0 sind. Infos dazu lassen sich aus den Bildern entnehmen.

 

So und hier ist der Code. Ich muss wieder dazu sagen, dass es Trockenübungen sind, da ich erstmal will, dass die grundlegenden Dinge funktionieren. Der Code wird dann irgendwann mal eine Methode um Endlosräume zu erstellen.

    void AddRoomIfRequiered()
    {

        Vector3 startPosi = startRoom.transform.position;

        //bestimmt den Zufallsraum aus der Liste
        int randomRoom = Random.Range(1, rooms.Length);

        //Background des Rooms dient zum ermitteln der Raumbreite und des Endpunktes ( Wert gilt für jeden erstellten Raum )
        float roomWidth = startRoom.transform.Find("background").GetComponent<SpriteRenderer>().bounds.size.x; 

        // Überquert der Spieler die Raummitte des aktuellen Raumes, wird ein neuer Raum erstellt
        float markForNewRoom = startRoom.transform.position.x;


        // X Wert an dem das Prefab beginnt
        float startPoint = startPosi.x - (roomWidth * 0.5f);

        //Zum ermitteln des Endpunktes: StartPunkt + backgroundImage Breite
        float endPoint = startPoint + roomWidth;

        //Stelle an dem der nächste Raum erstellt werden muss, damit dieser sich nicht mit dem vorherigen überlappt
        float createRoomSpot = endPoint + roomWidth * 0.5f;
    
        
        if (playerToFollow.transform.position.x > markForNewRoom)
        {
            //Raum wird ermittelt
            GameObject newRoom = Instantiate(rooms[randomRoom]);

            //neue Koordinaten für neuen Raum werden festgelegt
            newRoom.transform.position = new Vector3(createRoomSpot, 0, 0);
        }
      

    }

 

 

Jetzt zu meiner Denkweise:

Ich erstelle den Startraum in Awake(). Zuerst habe ich mal die Position des Startraumes gespeichert. Vermutlich unnötig, habs aber trotzdem mal gemacht. Man weiß ja nie, als Noob. Um die Breite eines Prefabs zu ermitteln, habe ich von dem Backgroundbild die Boundsbreite genommen. Dies ist ein Wert der nur einmalig gebraucht wird, da jeder Raum die gleiche Breite hat. Um dielinke äußersten Punkt vom BackgroundImage zu erhalten, hab ich einfach  den X Wert des Startraumes genommen - die Raumlänge / 2.

Zu diesem Wert habe ich dann die die Raumbreite hinzuaddiert. Wenn ich dort den Raum erstellen würde, würde es sich ja überlappen. Daher habe ich dann bei CreateRoomSpot den Endpunkt + die Raumbreite / 2 um quasi den nächsten Raumittelpunkt zu erhalten.

Dann erstelle ich einen neuen Raum. Anschließend weise ich dem x wert des neuen Raumes den Wert von CreateRoomSpot zu.

Trotzdem ist es versetzt. 

 

Wo ist da mein Denkfehler??????????????

 

Ich hab mir wirklich Mühe gegeben, den Fehler zu finden. Aber ich komm nicht drauf. Die Breite des BackgroundImages passt jedenfalls. Das kann ich als Fehlerquelle ausschließen.

 

1.PNG

2.PNG

4.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Sind die Referenzpunkte wirklich in der Mitte der Räume? Auf dem Screenshot wirkt es nämlich nicht so, weil das Zentrum des Raums sich nicht mit einer Gitterlinie von Unity schneidet (welche bei normaler Einstellung auf 1 Unit pro Linie bzw. eine dicke/helle Linie alle 10 Units eingestellt ist).

Es wäre noch hilfreich den falsch berechneten X-Wert vom 2. Raum zu sehen, dann lässt sich einfacher darauf schliessen was nicht stimmt ;)

Denn ansonsten sieht die Berechnung eigentlich richtig aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm aber wie man sieht ist die Position bereits bei 0,0,0.

Ich hatte auch bereits den Verdacht, dass etwas damit nicht passt. Aber wenn man oben auf Pivot klickt, ist es eigentlich in der Mitte. Einzig wenn man auf "Center" klickt, scheint der Raummittelpunkt woanders zu liegen.

Wie könnte man denn - angenommen es läge daran, das Problem beheben?  Klar, ich könnte die x und y Werte solange anpassen bis es passt. Aber das wäre in meinen Augen nicht wirklich sauber programmiert.

 

Update:

Der x Wert des zweiten Raumes liegt bei 18,99143.  Das entspricht der exakten länge des Backgroundimages

der x Wert des ersten Raumes liegt bei 0.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist wie auf dem Screenshot. Ich habe ein leeres GameObject erstellt. Darin befinden sich alle Grafikelemente des jeweiligen Raumes. 

Naja gut, der Center Punkt scheint ja zu passen. Der Pivot ist ja daher irrelevant. Den kann man ja soweit ich weiß, auch einfach verändern.

 

Ich weiß, dass die Child Grafikelemente von der Position relativ zum Parent Objekt sind.

Ich glaube ich weiß wo der Fehler liegt. Die Position der Tiles befinden sich relativ zum Parent Objekt gesehen im Minus Bereich.Ich werde einfach die Teiles verschieben, so dass auch die Tiles relativ gesehen zum Parent bei 0,0,0 anfangen. Dann müsste es klappen. Ich probiers mal.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab die Lösung gefunden. Es war wie ich es oben beschrieben hatte. Die Das leere GameObject war bei 0,0,0. Allerdings gingen die Childs relativ bei den X positionen ins minus. Ich hab jetzt den Raum relativ an den Punkten 0,0 aufgebaut. Jetzt klappt es.

Das ganze ist ärgerlich. Ich wusste es eigetnlich die ganze Zeit das es relativ war. Aber ich hab mich zu sehr auf auf das leere GameObject versteift und hatte einfach nicht dran gedacht. Naja. Das passiert mir nie wieder.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 41 Minuten schrieb SyntaxTalkstoMe:

Ich hab die Lösung gefunden. Es war wie ich es oben beschrieben hatte. Die Das leere GameObject war bei 0,0,0. Allerdings gingen die Childs relativ bei den X positionen ins minus. Ich hab jetzt den Raum relativ an den Punkten 0,0 aufgebaut. Jetzt klappt es.

Das ganze ist ärgerlich. Ich wusste es eigetnlich die ganze Zeit das es relativ war. Aber ich hab mich zu sehr auf auf das leere GameObject versteift und hatte einfach nicht dran gedacht. Naja. Das passiert mir nie wieder.

An Fehlern lernt man am besten. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...