2017-07-24 1 views
0

Ich wollte den Wert der Bildlaufleiste meines scrollview-Objekts bei jedem Erstellen eines neuen Textobjekts auf 0 setzen. Auf diese Weise würde das neueste Objekt immer unten bleiben, ohne herunterscrollen zu müssen (denken Sie beispielsweise an den Chat eines Videospiels). Mein Problem ist, dass das Programm aus irgendeinem Grund den Wert auf 0 setzt und dann das Textobjekt erstellt, so dass es das zweitjüngste Objekt am unteren Rand der Bildlaufansicht behält.Unity 2D Einstellen des Wertes einer Bildlaufleiste auf 0

Mein Code:

//Creates the Text objects 
private GameObject GenerateTextObject(string content) 
{ 
    //Creates the Text objects 
    GameObject messagePrefab = Instantiate(MessagePrefab); 
    Text textComponent = messagePrefab.GetComponent<Text>(); 

    //Sets the content of the text and parent 
    textComponent.text = content; 
    messagePrefab.transform.SetParent(ContentPanel.transform, false); 

    ScrollbarVertical.value = 0; 

    return messagePrefab; 
} 

Im Code, den ich am Ende der Funktion den Wert setze, sondern setzt immer noch den Wert der Scrollbar auf 0 (richtig die Scroll nach unten bewegt), bevor die Objekt wird erstellt.

https://gyazo.com/897982521f13d7792ec26540490a40c0 Im Gyazo Bild können Sie sehen, wie es nicht den ganzen Weg hinunter scrollt.

Ich habe versucht, eine Coroutine und WaitForEndFrame sowie WaitForseconds (1), aber keiner scheint zu funktionieren.

Bearbeiten: Beim Laden von Unity und Senden neuer Nachrichten an die Scrollansicht, sehe ich die Bildlaufleiste ganz nach unten und dann wirklich schnell nach oben bewegen nur ein wenig versteckt das neue Textobjekt.

+0

Ändern Sie die 'Elastizität' von ScrollRect zu' 0' und führen Sie dann 'ScrollbarVertical.value = 0;'. Das ist nur eine Idee. Nicht sicher, ob das überhaupt funktioniert. – Programmer

+0

Nein ... Ich habe versucht, mit allen ScrollRect-Optionen zu optimieren, und nichts scheint den Trick zu machen. :(, Vielen Dank für die Hilfe wieder Programmierer –

+0

Nach viel denken und herumspielen mit verschiedenen "Fixes" Ich habe eine Workaround für dieses Problem. Noch einmal, danke für den Versuch zu helfen :) –

Antwort

1

Was können Sie tun, ist eine neue Scroll View erstellen und gehen Sie folgendermaßen vor:

enter image description here

Das Ergebnis ist GenerateTextObject(Time.time.ToString()); zweite von fordert wurden, alle.

+0

Funktioniert wie ein Charme. Vielen Dank :) –

1

Ich habe keine richtige Lösung für dieses Problem gefunden (ich weiß wirklich nicht die Ursache des Problems), aber ich habe ein wenig Workaround für diese Situation zusammengestellt.

Um dies zu tun, habe ich einfach eine kleine Funktion erstellt:

public void Testing() 
{ 
    if (testing == true) 
    { 
     ScrollbarVertical.value = 0; 
     testing = false; 
    } 

} 

Dies würde auf die integrierte Funktionalität von Rollbalken „On Value Changed (Single)“ angebracht werden. Um dies zu ermöglichen, ändere ich einfach das bool "testing" auf true, nachdem ich ein Textobjekt auf GenerateTextObject (string content) erstellt habe.

Dieser Fix ist wirklich hässlich und würde wahrscheinlich in naher Zukunft mehr Probleme verursachen, aber im Moment ist es eine schnelle und schmutzige Lösung für dieses Problem.

+0

Wo nennst du diese Funktion? – Programmer

+0

Ich bin nicht sicher, wie es richtig heißt (ich bin wirklich neu in Einheit und Programmierung im Allgemeinen), aber auf den Inspektor, unter dem Scrollbar Vertical-Objekt, gibt es einen kleinen Ort namens "On Value Changed", hier habe ich hinzugefügt es. https://gyazo.com/5483eabac4b30171d6306facc60236ba –

+0

Hoppla. Ich habe verpasst, dass du * OnValueChanged * erwähnt hast. Ich habs. – Programmer

Verwandte Themen