🤑 Indie game store🙌 Free games😂 Fun games😨 Horror games
👷 Game development🎨 Assets📚 Comics
🎉 Sales🎁 Bundles


A member registered Jul 23, 2014 · View creator page →


Recent community posts

(Edited 1 time)

Yes, that's what I meant!

The way the math is working is... It takes the sprite sheet and uses the columns/rows setting to know how many boxes to slice the texture into. So, if there's 1 row and 3 columns and you want to read index 1 (the second image), the UV used would be... (0.3333,0), (0.66667,1)

...I think that might be it. Can you try making it so your texture is 4 units long instead of 3? (So the UVs would land on multiples of 0.25 instead of 0.3333 repeating) The UV math's float rounding might be what's pushing it over the edge? I think I might also be able to fix this by taking the far right UV (0.66667 in that example) and subtracting a very small number like 0.0001 from it. I'm away from my work computer atm, but I'll figure out exactly what line that would need to go on in just a bit!

(Edited 1 time)


Please make sure the quad texture is being imported as a texture, not a sprite. Not sure if that would be the exact cause, but that's a start. You've already tried resizing the sprites on your texture to give some space between quads, but can you try shrinking the texture even more? Quads are essentially just manual UV maps, so I think the first quad is reading info from the second and so on.

That said, there might be an issue with insanely big sprite sheets for Quads that I haven't solved yet, so this might be related to that? Hopefully shrinking the texture even more solves it, but I'm hoping it's just a certain import setting somewhere on the texture.

(Edited 1 time)

Updating this publicly so I don't forget:

Turns out there's an issue with the current UI shaders where if your scene/canvas has too many elements with different alpha shaders on em, this bug happens (I think that's the cause, anyway). Unity's included GUI/Text Shader seems to render fine so that can be used for now, but I'm going to have to update the current shaders to work a bit more like unity's GUI/Text Shader.

So... until I rewrite the shaders, you can either use unity's included GUI/Text shader, reduce the amount of alpha elements/shaders in your UI, or don't use Unity UI with STM altogether. Thank you for your patience, everyone!


I don't use FMOD myself, but I'm looking up a few tutorials on in, and I think it should be doable? I'm not 100% about the implementation of it, but I think if I were to add a delegate event that got invoked every time the audio source is supposed to play and you hooked that up to a script that interfaces with FMOD, that might work? 

You could also modify the source code and cut out the audio source entirely and replace it with FMOD I think, but I wouldn't be able to debug something like that!


Hmm, never seen this myself personally, and I was experimenting with different canvas modes last week. Please email me through my website w/ your invoice no., and I'll send you the latest development build I have! There's a chance this problem is already fixed in the most recent version, but either way I'll only be able to debug it from that most recent version anyway!

Okay this feature is in for the next update! I should have done this faster, but I was afraid of how using best fit on multi-line text would work, but it works great!

There's now 3 options for best fit... 

"Off" (which is just how STm behaved before, no changes)

"Always" which will always make text be as wide as the autowrap limit.

and "Over Limit" which will make text fit within the autowrap limit, but only shrink it to fit, not enlarge it to fit.

(Edited 2 times)


I was just thinking about this the other day, I might have a solution.

If this were an actual text input field, just adding the cursor to the end of the string would be fine, but this is just for animation purposes, so you might be able to do it like this:

using UnityEngine;
using System.Collections;
public class STMFakeCaret : MonoBehaviour {
    public SuperTextMesh stm; //the mesh to follow
    public Vector3 offset;
    void Update(){
        if(stm != null && //if there's a defined text mesh...
            stm.info.Count > 0 && //and it has textinfo to follow...
            stm.latestNumber > -1 && //and it's either drawing or done drawing...
            stm.hyphenedText[stm.latestNumber] != '\n'){ //ignore line breaks
            STMTextInfo myInfo = stm.info[stm.latestNumber]; //all info for this one character...
            //put the caret in the right place!
            transform.localPosition = myInfo.pos + myInfo.Advance(stm.characterSpacing, stm.quality) + offset;

If you put this on a gameobject that's the child of an object with your referenced Super Text Mesh on it, the object will follow the last drawn character! So I put this on a gameobject with a spriterenderer. You *will* have to modify Super Text Mesh's code just a bit to make this work, as the "info" list in STM is currently private, but I've changed it to be public to make this work.

Hope this solution works! I might add a custom event so you can call this function only when a new character is drawn, instead of putting it on Update.

Ah sorry, the docs really need to be updated a bit with some info from the forums. In the new version of STM I'm working on right now, there's a "Create New Material" button next to the material field that should make the usage a bit more obvious? But I'll try to update the tooltip and the docs!

(Edited 1 time)

Super Text Mesh is just a text renderer, not a text editor, so it doesn't have a caret it keeps track of by itself. To edit text at a certain position, you have to keep track of the "caret" with a variable.

Here's some pseudocode of how you can do this:

public int caretPosition = 0;  public SuperTextMesh stm; public void InsertTextAtCaret(string newText){      //add the string to super text mesh's text variable at the caret's position     stm.text = superTextMesh.text.Insert(newText, caretPosition);

To reiterate, this type of code can run in any string, not just Super Text Mesh's "text" variable!

Super Text Mesh is just meant to be a text renderer, so the type of code that would make this work for Unity's standard mesh will also work for STM.

If the caret is currently at index 3, then... 

superTextMesh.text = superTextMesh.text.Insert("***", caretPosition);

should insert a string at the caret's position.



I'm not 100% sure what you mean, so I'm guessing you're making a text entry field in your game?

Ignoring rich text, the position of a character relative to the object's origin should be just superTextMesh.info[indexOfCharacter].pos; You can use this to draw a caret in the right spot!


Taking care of this on your other thread: https://itch.io/t/190198/quadsimages-arent-displaying-at-all

From your other post, it seems that you're using Unity 5.4. I'm taking a wild guess and guessing that you're using STM with Unity UI. Unity UI didn't support multiple materials until Unity 2017.1, so quads are disabled in earlier versions. Sorry about that, but there just seemed to be no way around that in earlier versions, and it would always cause a crash.

I'm going to have to suggest either upgrading to 2017.1 or avoiding Unity UI. If you really wanted, you could set something up with custom events to place UI elements to imitate Quads, but that should just be a last resort.

Oh huh, I don't /think/ there should be a reason for that, so that must be it? I could swear it was getting registered under both? I sent you an email with the beta, but I'll get on this in just a bit, sorry!

Let me know what you find!

It's always a weird combo of relief and fear when a bug manages to "fix" itself...

I really should download 2017.3 to see if I can repro this, cause I've had no luck doing this in 5.3.4 or 2017.1.

The only real things I can think of that will solve this are...

In SuperTextMesh.cs, if you ctrl+F "OnFontTextureRebuilt", you'll find a function that should be getting added to an event called Font.textureRebuilt... this event should be getting added under Init(), and removed under UnInit()... Maybe the problem is that it's getting added too many times, and if the textbox is being enabled/disabled, the event handlers are getting confused?

Send me an email through my website, and I'll send you a beta build! I'll try making it so these handlers are only called once no matter what.

(Edited 2 times)


I can't believe this bug is back once again... I've been using 2017.1 myself so maybe it's something with 2017.3...?

You're right in the cause of it, it's caused whenever the font atlas gets updated, but STM doesn't rebuild for some reason. STM is subscribed to an event that gets invoked to call Rebuild() whenever its font atlas updates, but for some reason it doesn't always call Rebuild()...? I thought I fixed this 100% before, but I've learned a lot about events in the past few months, so I'll revisit that code and see if it's something to do with that. I am curious if it has something to do with that name box having bolded text, though.

In the meantime, you can avoid font atlas updates altogether if you set your game's font to be non-dymanic. (Go into your font's import settings and change that there) The only downside to non-dynamic fonts is that you can't adjust their quality, and they dont do bold/italics. You can change this in the font's import settings.

I'll look into this again shortly, sorry for the inconvenience!

Ah okay, I'll try playing with differently sized canvases and see if that makes it happen. I'll also play around with enabling/disabling mipmapping on text.


Giving it a shot today, and I'm actually having trouble getting this to happen.

Could you tell me what version of unity you're using, and give me a screenshot of both your parent canvas's inspector and your text object's inspector? If possible, link me to the font you're using, too!

Hey - I'll give this a look tomorrow, but I have a few guesses in the meantime. My outline shader could be screwing up in a few different ways - either the outlines aren't rendering right with alpha, or it could be casting shadows it's not supposed to? Not sure what would be receiving the shadows, maybe something I'm overlooking with worldspace canvases?

I'll test it out tomorrow and get back with a solution ASAP! That title text is looking great btw, and this is really good info for me to use, thanks!

I've seen this error pop up before, butnever actually cause any issues until now. This helped pinpoint it!

Adding "if(onCompleteEvent != null)" before the code on line 1121 seems to make everything work fine!

I'll publish the patch shortly!

Hey! Good eye, never noticed this in specific.

Those variable wrap distances have gotta be put in manually, I think...? It's gotta just be manual line breaks I think. I can think of a way to do it automatically, but not a way to do it automatically and get good results every time.

If you're cool with manual line breaks, you can just set Super Text Mesh's anchor to be "Middle Center" (if you're using UI text, just align it "middle"), and then set the alignment to "left"? If autowrap is off (or on!) that should deliver the right result?

Also while testing this I realized that line breaks are acting pretty weird for middle-anchored text, so I'll be working to fix that shortly, sorry about that!

This might be a good chance to explain my price point!

I'm not sure how new you are to game dev, but another asset on the Unity Asset store, "Text Mesh Pro" used to be priced at $65 while in beta when my asset was released. While my asset was in beta, it had a price of $35. Out of beta, TMP went up to $95, and I decided to take their old price point since I now felt STM had surpassed everything I wanted from a text asset, while being more user-friendly.

I felt $65 was agreeable as a price point because I wanted to hit some specific numbers. Something not too high, because I deeply want this asset to be used by new developers, and I don't want to have anyone need to slog through creating a text system ever again. It took me 8 months to get a beta release, and I'm still working on this years later. I put in that time so you don't have to.

I also didn't want to price the asset too low, as Unity has some pricing guidelines I wanted to respect, and I also had myself I wanted to respect! I put in a lot of time into this project, and it needed a pricepoint to let people know that it's a serious asset that does what it does and does it well.

I settled on $65 after long deliberation with multiple colleagues since $65 is just about a day and a few hours worth of work at $8/h, and trust me, it's going to take you much, much longer than that to get a text system like this up and running.

Even after Text Mesh Pro got bought by Unity and went free, my sales have continued to rise! People seem to like what I'm offering better, even when my lead competitor went free. That said, if you're still irked about the pricepoint, Unity occasionally has seasonal sales, and I am opted into this program and match any asset store price changes here on the itch.io page, so you can wait for that if you want. No guarantees though, I don't control who gets those participation emails!

Anyway, I'll just mark this topic as "solved". ;)

Solved this in v1.6.2!! Sorry this took so long, I never had a good repro of the problem until recently.

Sweet! I'll implement this and upload a new version shortly. Thank you so much for the repro!

First thing I noticed was that the text in the new scene is there for a single frame before disappearing. Also, Rebuild() is being called, and I set up a debug to check this. If I tell a mesh to not Rebuild() under Async single loading, the 1-frame flash doesn't happen. Even more interesting, this appears to only be effecting UI text! I added a non-Unity UI Super Text Mesh object to the scene, and it survived the load just fine.

I do notice that with debug mode enabled, the new scene's STM object doesn't appear to have an internal material. This material is still there when I switch the load mode to additive, so this has the be the cause of the problem.

It looks like if I tell STM to wait a frame before Rebuild() is called, it seems to work fine? As far as I can tell, it's not even flashing for the one frame it's not supposed to be there for. Give this a shot and lemme know what you think, and let me know if you see it blink for one frame. If it does, Rebuild() will just have to be called again, right before that "yield return null" line.

On line 821 of SuperTextMesh.cs, replace everything in the #if statement with these functions:

void OnSceneLoaded(Scene scene, LoadSceneMode loadSceneMode){
    if(this != null){
        if(loadSceneMode == LoadSceneMode.Single){
IEnumerator WaitFrameThenRebuild(){
    yield return null;

Thanks for the repro! I've been meaning to look into this Async loading issue for ages, but never got a repro for it.

The current solution is calling SuperTextMesh.RebuildAll() when the scene is done loading, but now with this repro I'll hopefully find a real solution shortly. Thanks!

Hey! This is the support forum for Super Save Loader! Make sure to check out the docs!


I've never used Wwise before, but if it has functions similar to Unity's built-in audio source, it can probably be swapped out?

The only major functions you'd need are Play() and Stop(), and some way to change the pitch of an audio source, and what clip is currently being used. Try making the "audioSource" variable an "AkSoundEngine" instead of an "AudioSource", see what breaks, then replace with similar variables? I'm completely guessing at the functionality of this class, but this is how I'd do it!

For the text wrap, try checking and unchecking the "break text" boolean, that setting should be the cause of what you're describing! It's good for some situations, but not most.

Published a fix, hopefully it all works good, I'm supposed to be heading to sleep r/n

Hey, working on it now, just figured out the cause. The offset is being applied before the lowest line is calculated. Just gotta figure out a way around this

actually nvm this one's my fault, this is being caused by some code related to indents

It's effecting empty strings, since the code is trying to get the indent of the first character in a string, which doesn't exist.

Replace line 1907 with this:

Vector3 pos = new Vector3(info.Count > 0 ? info[0].indent : 0f, 0f, 0f); //keep track of where to place this text

and line 1921 with this:

 float lineWidth = info.Count > 0 ? info[0].indent : 0f;

I'll publish a hotfix right now!

Hey! The playmaker actions haven't been updated in a long time, and were written by a pal, since I don't use playmaker myself. I'll get them to take a look at it!

Posted in [solved] Period

Pushed an update so this wont be an issue, thanks for catching it!

Posted in [solved] Period


Fuck I completely fucked up on this one, I wasn't thinking when I made that new update. I added a new field called "auto voice" to TextData, it's under the "master" foldout. Just clear that string and it'll remove the dot, I'll push an update without it right now. It was supposed to effect just the demo, but I forgot it'd end up as default for everything, too

Published it! On itch already and should be on the asset store shortly.

#4 done, indents are in!

The float value determines the indent in localspace, so resizing the text keeps the indent at the same spot. I wanted it to be just an "<indent>" tag that sets the indent to be at the letter it was typed at, but all my autowrap code takes place before my positional data I'd need, so I'd have to redo that section to get it working that way. But I think this should be a good fix for now!

I'll publish the update soon, but I want to see if I can get one or two other features working first, since this will be a new version number. Drop me an email and I'll send you a build of what I currently have if you want, though!

Also, there's an exposed variable named "lowestLine" now, which holds the latest line drawn by STM. So if you don't like the scrolling effect I did, that can be used to create your own!

#3 is in! Mother 3 style dialogue boxes are something I really can't believe I forgot.

It'll be out in the next update, which is hopefully soon if I can get the <indent> tag in shortly!