Jump to content
Unity Insider Forum
Thariel

RectTransform anchoredPosition setzen funktioniert immer erst beim 2. Anlauf

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.

Share this post


Link to post
Share on other sites

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.

 

Share this post


Link to post
Share on other sites

Hi

Ich hab in der Update() Funktion einfach ein SetActive() Toggle eingebaut:

if(Input.GetKeyDown(KeyCode.M))
{
   goWindow.SetActive(!goWindow.activeInHierarchy);
   CmdCenterPlayer();
}

 

Share this post


Link to post
Share on other sites

dann dreh das doch mal um

if(Input.GetKeyDown(KeyCode.M))
{
	CmdCenterPlayer();
   	goWindow.SetActive(!goWindow.activeInHierarchy);
}

 

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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 :)

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...