Jump to content
Unity Insider Forum

RectTransform anchoredPosition setzen funktioniert immer erst beim 2. Anlauf


Thariel

Recommended Posts

Hi

Wenn der Spieler die Karte öffnet, soll er immer schön zentriert sein. Dazu hab ich eine Funktion gemacht. Diese wird beim öffnen der Karte aufgerufen und ist auch über einen Schaltfläche aufrufbar.

Jedoch funktioniert es nie auf Anhieb, sondern immer erst beim zweiten Versuch. Ich muss also die Karte 2x hintereinander öffnen, damit die Position korrekt gesetzt wird. Wie ihr seht ist bei der Position im RectTransform immer etwas merkwürdig, entweder bei X oder Y.

Hab schon Canvas.ForceUpdateCanvases() und LayoutRebuilder.ForceRebuildLayoutImmediate() ausprobiert.

public void CmdCenterPlayer()
{
   float x = Mathf.Floor(PlayerController.singleton.transform.position.x / 4.0F);
   float y = Mathf.Floor(PlayerController.singleton.transform.position.z / 4.0F);
   rectContent.anchoredPosition = new Vector2(-x * 50, -y * 50); //50=map tile size
}

Wer weis warum das so ist? Solche unlogischen Dinge machen mich echt nervös! 😡

 

PS: Das ganze befindet sich in einem ScrollView und das GameObjekt im Inspector ist das Content-Objekt vom ScrollView.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weiss nicht wie und wann was ausgeführt wird. Könnte mir vorstellen, dass zuerst das UI Element geöffnet und erst dann die Funktion "CmdCenterPlayer" ausgeführt wird. Würde zumindest erklären warum es dann beim zweiten mal öffnen stimmt, weil er in dem Fall die Positionsberechnung vom vorhergehenden Aufruf hat.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb Thariel:

Komisch ist auch, dass manchmal X korrekt aktualisiert wird und machnmal Y, aber nie beide auf Anhieb korrekt..

Das verstehe ich auch noch nicht so ganz.
Würde ja bedeuten, dass dein Wert im PlayerController nicht aktuell ist.

Da könntest du dir ja z.B. statt die Werte .x .z aus dem Player Controller zu saugen, direkt mal die Transform Komponente nehmen.
Ansonsten kannst du möglichst viel der Variablen public machen oder SerializeField einfügen um im Inspector zu sehen wo was augegeben wird. Hilft mir zumindest.

Aber ohne das ganze Script wirds schwer zu erraten woran es liegt, aussderm bin ich jetzt auch nicht so der Guru im coden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Wert ist schon aktuell, es ist die direkte Position vom Player und diese siehst du auch auf der Karte (gelber Pfeil).

Habe das Problem aber jetzt gelöst: Hab einfach das ganze umgebaut und verwende jetzt kein ScrollView mehr, sondern einfach ein Image mit Maske. Sieht jetzt immer noch alles genau gleich aus, aber kein ScrollView, das rein pfuscht.

Danke :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...