Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sprite and/or Rich Text tags in TextMesh label is stopping character animations #10

Open
cellininicholas opened this issue Jun 5, 2024 · 1 comment

Comments

@cellininicholas
Copy link

cellininicholas commented Jun 5, 2024

My character animations are getting as far as the character I have in my text.
I'm even skipping the sprite character animation setup.

for (int i = 0; i < tweener.CharacterCount; i++)
{
    TMP_CharacterInfo charInfo = textInfo.characterInfo[i];
    if (charInfo.elementType == TMP_TextElementType.Sprite) {
        Debug.LogWarning($"TMP_TextElementType.Sprite character");
        continue;
    }
    // Character animation setup comes next...
                
}

I've found that if I edit the Text live in the Editor and delete the Sprite, the animations for all the characters suddenly start working.
Any tips?


Update 1
In fact, it looks like that is the case with all Rich Text Tags in my TextMeshPro label...


Update 2
I've discovered that in CharTweener::UpdateCharPositions()
There is a check which is skipping characters after a Sprite character...

for (var i = proxyTransformList.Count - 1; i >= 0; i--)
{
    // ...
    if (proxy.CharIndex >= characterCount)
        continue;
    // ...
}

Looks like proxy.CharIndex is referencing the index of characters BEFORE Rich Text Tags are passed and characterCount uses the count AFTER Rich Text Tags are passed.

@cellininicholas
Copy link
Author

Alright I figured out a solution that got it working with Sprites present.
I'm too lazy to make a pull request, so if anyone wants to make the change or find the solution, here it is:

In CharTweener.cs, modify AssignCharInfo(TMP_CharacterInfo charInfo) to the following

public void AssignCharInfo(TMP_CharacterInfo charInfo, int parsedCharIndex)
{
    // charIndex = charInfo.index;
    charIndex = parsedCharIndex;
    
    // ...            
}

Then, anytime AssignCharInfo() is called, pass the non-raw character index.
That means changing the two calls in UpdateStartPositions() to...

proxy.AssignCharInfo(charInfo[pair.Key], charIndex);

Sprites and all following characters worked for me after that.
I assume this also fixes any labels that contain Rich Text.

@cellininicholas cellininicholas changed the title Sprite in TextMesh label is stopping character animations Sprite and/or Rich Text tags in TextMesh label is stopping character animations Jun 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant