Thariel Geschrieben 18. Mai 2019 Melden Share Geschrieben 18. Mai 2019 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 More sharing options...
Jomnitech Geschrieben 18. Mai 2019 Melden Share Geschrieben 18. Mai 2019 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 More sharing options...
Thariel Geschrieben 18. Mai 2019 Autor Melden Share Geschrieben 18. Mai 2019 Hi Ich hab in der Update() Funktion einfach ein SetActive() Toggle eingebaut: if(Input.GetKeyDown(KeyCode.M)) { goWindow.SetActive(!goWindow.activeInHierarchy); CmdCenterPlayer(); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jomnitech Geschrieben 18. Mai 2019 Melden Share Geschrieben 18. Mai 2019 dann dreh das doch mal um if(Input.GetKeyDown(KeyCode.M)) { CmdCenterPlayer(); goWindow.SetActive(!goWindow.activeInHierarchy); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Thariel Geschrieben 19. Mai 2019 Autor Melden Share Geschrieben 19. Mai 2019 Macht leider keinen Unterschied! Komisch ist auch, dass manchmal X korrekt aktualisiert wird und machnmal Y, aber nie beide auf Anhieb korrekt... Hast du noch eine andere Idee? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jomnitech Geschrieben 19. Mai 2019 Melden Share Geschrieben 19. Mai 2019 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 More sharing options...
Thariel Geschrieben 19. Mai 2019 Autor Melden Share Geschrieben 19. Mai 2019 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 More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.