Jump to content
Unity Insider Forum
Sign in to follow this  
him.2013

Fehlerhafte Text-Darstellung - Bug oder doch Programmierfehler?

Recommended Posts

Hi,

ich habe eine umfangreiche App programmiert und bekomme ab und zu (im Handy oder in der Windows-Version) eine fehlerhafte Darstellung einiger Text-Elemente (siehe Screenshoot).

Das Problem: Der Fehler kommt nur alle 6 Monate einmal in Unity-Editor vor. D.h. ich habe keine Möglichkeit, mit dem Unity-Editor raus zu bekommen woran es liegt. 

Der Editor hatte das letzte Mal folgenden Fehler ausgegeben:

InvalidOperationException: HashSet have been modified while it was iterated over
System.Collections.Generic.HashSet`1+Enumerator[UnityEngine.UI.Text].CheckState ()
System.Collections.Generic.HashSet`1+Enumerator[UnityEngine.UI.Text].MoveNext ()
UnityEngine.UI.FontUpdateTracker.RebuildForFont (UnityEngine.Font f) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/FontUpdateTracker.cs:40)
UnityEngine.Font.InvokeTextureRebuilt_Internal (UnityEngine.Font font) (at C:/buildslave/unity/build/artifacts/generated/bindings_old/common/TextRendering/TextRenderingBindings.gen.cs:598)
UnityEngine.UI.Text:get_preferredHeight()
MyListView:TextOptimalAnpassen(GameObject, String, String, Int32) (at Assets/Scripts/Lists/MyListView.cs:61)
ListCreator:EinDiagnoseElementErtellen(String[], Int32) (at Assets/Scripts/Lists/ListCreator.cs:286)
ListCreator:ZeigeEineGruppeVonDiagnosen(Int32, Int32, Int32, Boolean) (at Assets/Scripts/Lists/ListCreator.cs:249)
<GefundeDiagnosenEinfuegen>c__Iterator1:MoveNext() (at Assets/Scripts/Lists/ListCreator.cs:228)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
ListCreator:GetGesuchteDiagnosen() (at Assets/Scripts/Lists/ListCreator.cs:174)
UnityEngine.EventSystems.EventSystem:Update()

Der SourceCode zu dieser Stelle:

    public void TextOptimalAnpassen(GameObject gameObj, string txtText, string textName, int childNr)
    {
        Transform txtObj = gameObj.transform.GetChild(childNr);
        Text txt = txtObj.GetComponent<Text>();
        txt.text = txtText.TrimEnd();
        LayoutElement myLayoutElements = gameObj.GetComponent<LayoutElement>();
        myLayoutElements.preferredHeight = GetPreferredHeight(txt) * txt.transform.localScale.x * 2.4f - 10;
        if (myLayoutElements.preferredHeight > 100)
            myLayoutElements.preferredHeight = GetPreferredHeight(txt) * PlayerPrefs.GetFloat("tabletFactor2"); //myLayoutElements.preferredHeight -= 55;
        else if (myLayoutElements.preferredHeight > 80)
            myLayoutElements.preferredHeight -= 15;
        txt.transform.name = textName;
    }

wer kann hier weiter helfen?

vielen Dank

Hîm

S_Win_4.png

Share this post


Link to post
Share on other sites

Falls jemand interessiert. Den Fehler konnte ich nicht wirklich beheben. Aber als ich nach dem  auftauchen des Problems den Textinhalt verändert habe (ich habe ein leer Zeichen hinzugefügt), dann war das veränderte Textelement nicht mehr fehlerhaft. 

Grüße

Him

Share this post


Link to post
Share on other sites

Echt komisch. Aber vielleicht liegt es an deinem TrimEnd(). Keine Ahnung was da passiert.

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×