A Unity ID allows you to buy and/or subscribe to Unity products and services, shop in the Asset Store and participate
in the Unity community.
Discussion in 'Assets and Asset Store' started by Stephan-B, May 29, 2014.
Glad to here that. This means there is nothing I can do to fix this on my own right?
Unfortunately not as advanced glyph shaping requires access to the GPOS & GSUB tables contained in the font file which isn't available yet.
Making sure Multi Font & Sprite support works correctly with Masking & ScrollRect and Unity's Layout components.
Hi and happy new year!
I have this error afterr with the last version of textmeshpro on the asset store (can't download from your website, too slow).
Could you help me please?
MissingComponentException: There is no 'CanvasRenderer' attached to the "TextMeshPro" game object, but a script is trying to access it.
You probably need to add a CanvasRenderer to the game object "TextMeshPro". Or your script needs to check if the component is attached before using it.
UnityEngine.UI.Graphic.get_depth () (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Graphic.cs:158)
UnityEngine.UI.GraphicRaycaster.Raycast (UnityEngine.Canvas canvas, UnityEngine.Camera eventCamera, Vector2 pointerPosition, System.Collections.Generic.List`1 results) (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/GraphicRaycaster.cs:225)
UnityEngine.UI.GraphicRaycaster.Raycast (UnityEngine.EventSystems.PointerEventData eventData, System.Collections.Generic.List`1 resultAppendList) (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/GraphicRaycaster.cs:138)
UnityEngine.EventSystems.EventSystem.RaycastAll (UnityEngine.EventSystems.PointerEventData eventData, System.Collections.Generic.List`1 raycastResults) (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/EventSystem.cs:180)
UnityEngine.EventSystems.PointerInputModule.GetMousePointerEventData (Int32 id) (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/InputModules/PointerInputModule.cs:198)
UnityEngine.EventSystems.StandaloneInputModule.ProcessMouseEvent (Int32 id) (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/InputModules/StandaloneInputModule.cs:424)
UnityEngine.EventSystems.StandaloneInputModule.ProcessMouseEvent () (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/InputModules/StandaloneInputModule.cs:416)
UnityEngine.EventSystems.StandaloneInputModule.Process () (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/InputModules/StandaloneInputModule.cs:190)
UnityEngine.EventSystems.EventSystem.Update () (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/EventSystem.cs:277)
MissingComponentException: There is no 'RectTransform' attached to the "TextMeshPro" game object, but a script is trying to access it.
You probably need to add a RectTransform to the game object "TextMeshPro". Or your script needs to check if the component is attached before using it.
TMPro.TextContainer.OnRectTransformDimensionsChange () (at Assets/TextMesh Pro/Scripts/TextContainer.cs:289)
@ababab5 First lets make sure you are using the correct release since there is a bug with the Asset Store where it is not providing the correct release based on the version of Unity to download it.
Look at the header file of the TextMeshPro.cs file which includes what version you are using.
Next, as per the release notes, you have to remove (delete) the previous package before importing the new package. This is required since Unity's Asset Importer is very primitive and has no ability to deal with old files that are no longer required. Be sure to backup your project first.
Thanks for your very quick answer.
Yes I deleted the previous version and I hate to the asset importer
version : //Release0.1.52Beta 3
That is the correct release.
I am not sure why you are getting those errors as those components should be automatically added since they are required components added by inheriting from the Graphic class. Any chance you can email me a Repro of the scene that is producing those errors?
BTW: Entering play mode should force those components to be added.
Yes no problem : give me your email please.
I will share you a link to download the project.
The email address and other contact information is at the end of the first post of this thread. Here it is anyway.
TextMesh Pro looks really amazing. I'm curious could it fix a bit annoying problem in Unity?
Here is a link to my thread regarding the problem:
Thank you for your time.
I've been working with your plugin, so far it has been fantastic and solved every last issue I've had with unity's text. The inline sprites are particularly cool, but I was wondering if there's any functionality in the plugin to color the sprites? That could open a whole new world of usage.
Let me know if there's anything in it already, or planned. Otherwise I'll just hack something in
Thanks for your awesome work
Text is typically rendered by using (1) Quad / 4 vertices per character. This is not unique to Unity but how it is done in general. So the more characters you have the more geometry you end up having.
Depending on whether or not the text is static, you could use a Render Texture which would then only require a single quad but I would need to know more about your use case to determine whether or not that would be an option in this case.
Here is an image of a text object showing the use of Multiple Fonts & Sprites in a single text object as well as using a Fallback Font to handle missing glyphs from the currently assigned font asset.
Here is an image of the TMP Settings where the list of Fallback Font Assets can be defined.
Adding another Font Asset like FontAwesome to the Fallback list makes it easy to also use icons from it. In this case, the Apple was added by using the UTF-32 support which is in the form of \U00001F79
Thank you for the answer.
I don't have any special use case for this requirement I'm just interested in optimization on mobile.
It's quite troublesome on mobile devices that a full screen description alone could use 10k vertices.
So a UI containing long descriptions could effect the performance of the running game on mid and lower end handheld devices.
Hi, nice asset! I have few questions regarding 2D development.
1) I am wondering are Photoshop-like blending modes supported? Additive, overlay, screen, multiply, darken, linear burn, lighten, linear dodge etc.? I need only additive, overlay, and screen blending.
2) Is there an option for vertical / horizontal text scrolling inside of the box?
3) Is there a support for alpha masking?
The shaders are transparent shaders similar to Unity's text shader so they don't support any blending type. However, the text can always be rendered to a Render Texture where you can then use other types of shaders which would support different blending modes.
Yes. The vertex X and Y offset can be controlled to scroll the text. The TextMeshProUGUI component which works with the Canvas system also works with Unity's ScrollRect which then gives you another means of scrolling the text.
Both Stencil Masking and the new 2D RectMask are support. With a few tweaks, soft masking on the 2D RectMask can be enabled. It is also possible to modify the shaders to support a texture with alpha for masking. You would need to reach out to me via the TextMeshPro user forum when you are in need of that.
Hello. Is new version support <sprite > tag on non-canvas TextMeshPro objects?
The current version doesn't but the next release with the Multi Font & Sprite support along with Fallback fonts is almost ready.
Here is a test shot using different fonts, materials and sprites.
In this example two different sprite assets are used. This will be possible by using the following form of the sprite tag. <sprite="Xmas Stickers" index=0> or <sprite="Xmas Stickers" name="name of sprite">
When next version be released?
I am going to try to get the first release out within the next 7 to 10 days. However, I might release an Alpha on the user forum sooner in order to get feedback.
I wrote some editor code that uses Undo.AddComponent<TextMeshProUGUI>(gameObject) and when I Undo, it generates an nullref/use of destroyed object error in the SetVerticesDirty() method of TextMeshProUGUI class, it is called as an event listener through an internal TextMeshPro manager event.
Adding "this.IsDestroyed()" as the first thing checked in the early return test of that method fixed it for me.
That makes sense as the Unity CanvasUpdateRegistery would still be trying to call those functions. I believe the same behavior is likely to be observed with their Ui.Text since I don't recall seeing any check for IsDestroyed().
I am not sure I want to add this extra check for performance reasons but I'll take a look. I am surprised that a destroyed object is still showing as IsActive().
Making sure text Overflow - Ellipsis mode works well with the soon to be released Multi Fonts & Sprites support.
In this example, the text object is using (3) fonts and (1) sprite. As you can see the Ellipsis (...) is correctly inserted regardless of the target being a different font or sprite.
I'm guessing it's just a race condition as the object is cleaned on the next update. Too bad Unity doesn't provide something like an event function for cleaning up components when they are "destroyed" by the editor.
I'd guess that that the IsDestroyed() does two null checks to determine if it has been destroyed (because of Unity's quirky overload implementation of equals)
if( x == null && null == (object)(x))
// object is marked as destroyed but not cleaned up yet
I've actually written some code before like this though, however weird/wrong/ugly it may look:
if( this == null ) // "This" is a component.
// object is marked as destroyed but not cleaned up yet
Notice - TextMesh Pro user forum is experiencing a cold right now so access is down. Working with the hosting provider to get this back up and running as soon as possible.
Update - This was an issue with the hosting servers which are now back and running.
Hi Stephan, first of all, congratulations on your work, looks like a must have add-on.
Just one question, how does this component behaves with paragraphs with "bullets"? I mean, how does text in the second line of a "bullet" line adjusts?
Example of UI.Text:
this is a one-line "string" so long it's adjusted
in two lines.this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines.
(second line left aligned to "container" not aligned to "text" )
this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines. this is a one-line "string" so long it's adjusted in two lines.
(All lines aligned to "text")
For bullets and the likes, you can use the <indent=x.x> tag. Tags can be defined in pixel units (px), font units (em) and as percentage (%) of the width of the container.
Here is an example using your example. The raw text was "1.<indent=3%>this is a one-line..."
The indent tag can also be used to create multiple levels of indentations as seen in the image below.
There are over 30 Rich text tags available in TextMesh Pro. The following two might be of interest to you in terms of text alignment control.
Text alignment can be controlled per line / paragraph.
Is next version released?
I am still working on it and so close.
I've been following your tutorial on using textInfo.characterCount to create a typewriter effect. It's a great solution, but I wondered if you had an idea of how I could add my own custom tags to my text to allow for pause commands? I'm presuming custom tags are not supported?
Take a look at the Old Computer Terminal example included with TextMesh Pro. It uses the .maxVisisbleCharacters property and doesn't involve any string operations.
In terms of custom tags, that is not possible yet. However, after the next release I'll be adding a new tag <action> which will allow users to define custom actions like "This is <action="Wave" speed=5>an example</action> of text."
The <action> tag will allow you to define and use a custom function to affect the text. The tag will pass to that function, the relevant data to know which characters should be affected by the tag and then it is up to you to write the function to do whatever you want.
Ah that sounds perfect!
Stephan and I made an alternative dropdown list for Unity's UI. It uses TextMesh Pro labels instead of UI Text labels. You can find it on the support forum.
@Stephan B I was wondering if you knew if Text Mesh Pro would be on sale at any point? Also, is there a demo/trial version we can try?
The current pricing on TextMesh Pro reflects a 30% discount since the product is technically still in beta (self imposed at this point). Once I release version 1.0, the price will be increase by 30%. After that time, I will put the product on sale from time to time but never offer more than 30% since those who purchased it a long time ago when it had no reviews and was truly in beta took the biggest risk and gave me and my product a chance and for that they deserve to have paid the lowest price for my product. I am so grateful to all of them.
The product remains in beta today simply due to the fact that I had a list of features that I wanted to include in 1.0 and until those are in, I'll keep as beta. Those last two remaining features are the Multi Fonts & Sprites which is about to be released and the Text Input Field which will follow shortly thereafter. I could have taken the product out of a beta months ago but was happy to continue to provide the beta discount.
In terms of demo / trials, there are none but there are plenty of videos showing almost every aspect of the product. If you have any questions about any aspect of the product, feel free to reach out to me and ask.
While there is currently no special support for drop caps, you can create them with some creative use of rich tags. See this topic on the support forum.
TextMeshPro 0.1.54 Beta 1 Release Notes
This release is available to all registered users of the product on the TextMesh Pro User Forum.
New Features and Functionality
Added support for Multi Fonts & Sprites. I am currently working on an updated video for this feature. In the meantime see the following video which will still provide a good overview of this new feature.
Added new <font> tag. Note the name of the font and material are case sensitive.
[o]<font="IMPACT SDF" material="IMPACT SDF - Drop Shadow">
[o]</font> switches to the previously used font.
[o]<font="Default"> switches to the default font assigned to the text object.
Revised <sprite> tag implementation.
[o]<sprite="Name of Sprite Asset" index=index>
[o]<sprite="Name of Sprite Asset" name="Name of sprite">
[o]As per the previous release, the "tint" and "color" attribute can also be added to the sprite tag.
Added support for Font Fallback which can be defined in the TMP Settings file. See the following video for further details.
Improvements & Fixes
Fixed an issue where the reference to the CanvasRenderer could be lost.
Fixed an issue where the text alignment could be wrong when using Overflow - Ellipsis or Truncate mode.
Fixed issue where anchor positions of the Text Container when loading a scene created with a previous version of TextMesh Pro.
Fixed an issue with scaling where the text could be rendered as blocks.
Improved how fading of the face, outline and underlay portions of the text is handled in the shader.
Updated the Font Asset Creator to improve handling of OTF fonts.
Improved handling of ZTest when using the Canvas system.
Fixed a few minor issue related to the Text Container and newly added support for RectTransform.
Fixed an issue related to text alignment when using sprites.
Improved handling of Line Height and Line Spacing.
Font Asset Creator now shows Hex value of missing glyphs as well as Decimal value.
Improved handling of Undo / Redo related to Material Preset Drag-n-Drop functionality.
Updated how the SDF Scale is updated when only the scale or lossyScale of a text object is changed.
Fixed an issue where using the color or tint attribute with the sprite tag would affect all sprites.
Fixed null reference issue which could occur when getting preferred values on disabled objects.
Added _ClipRect property to the material debug panel. This is used for debug purposes.
Improved upgrade compatibility with pre Unity 4.6 releases.
Added tintAllSprites to TMP Settings.
Kerning is now disabled by default in the TMP Settings file since most users don't import kerning pairs in the first place.
Fixed a minor issue related to word counting when using quotes at the start of the text input.
Fixed a minor issue with the <nobr> </nobr> tags not working with East Asian languages.
Updated the list of leading and following line breaking characters for East Asian Languages.
Added support for Zero Width Space.
Added the beta RTL support to the TMP UGUI component.
Fixed an issue where re-parenting a text object to another canvas result in some events being ignored.
Added new overload for SetText to use StringBuilder.
SDF scale encoding is now using the lossyscale.y due to Unity's CanvasScaler change in 5.4.0b5.
Repacked the sprites used in the Default Sprite Asset into a smaller 512 X 512 texture.
Note (1) - I will also have a separate release of this new version for Unity 5.0 / 5.1 available later today or worst case tomorrow.
I have a question about the page overflow feature, specifically about getting the number of pages from the TextMesh component. I have a TextMesh component with 3 pages. If I do the following in the Start or Awake function:
dialogText = gameObject.GetComponent<TextMeshProUGUI>();
maxPages = dialogText.textInfo.pageCount;
Debug.Log("Number of pages: " + maxPages);
then the maxPages variable will be zero. However, if I check the pageCount using the same textInfo.pageCount variable after Start or Awake (such as in Update()) then it correctly returns the right number (3, in this case). Is there some other initialization step that I have to wait for before checking some of the internal variables?
Edit: The pageCount seems to be zero throughout the first frame. Not until a second Update() is called does it seem to be getting the correct value assigned.
Aside from this hiccup, I have been loving the asset so far.
Since several properties of the text object could be changed per frame and since users may change these properties late in functions like LateUpdate(), the text is regenerated once per frame just before the frame is rendered. This is also done for optimization purposes as regenerating the text several times per frame every time a property is changed would not be very efficient.
As a result of this optimization, changes to the text and it properties as well as the content of the data structures like textInfo won't contain the correct information until the text has been regenerated. This works for the most part but for times where you need the text object to be updated sooner to check the bounds or to check the content of the data structures, you can use the TextMeshPro.ForceMeshUpdate() which will force the text to be regenerated immediately which will also update the content of the data structures.
This information is covered in several posts on the TextMesh Pro user forum as well as in the Frequently Asked Questions along with other useful information.
Let me know if you need further assistance with this.
Ahh, I see now. I added a ForceMeshUpdate() in the Start() function, and now it's working perfectly. Thank you so much for the quick reply!
Is new version support <sprite> tag for non-canvas TextMeshPro objects?
Yes as well as the ability to use multiple fonts per text object.
Hi. TextMesh Pro looks amazing. But I haven't been able to find info on the platform support:
Does it support WebGL?
iOS? (older phones eg. 3GS too?)
Yes. TextMesh Pro works with all platforms that Unity supports.
In terms of older devices, everything should be fine although using the SDF Surface shader which is mostly designed for desktop use might be much for a 3GS. The normal or mobile SDF shaders will be fine.
Not only it works, but its the most optimized solution for mobile you can find.
The mobile shader only require shader model 2.0.
Example of using the new Multi Font & Sprite feature along with Font Fallback to access icons from font library like Font Awesome.
Hello ! : ) Any news on the volumetric development? I am actually from the motiongraphics area. Tmp with (extrution / bevel support ) combined with mega fiers.. no need to open ae or c4d anymore ; )
I have some questions. I'm trying to do a "Combat Log". Whenever something happens I want to add more text to a new line in my text field.
- Game Started
- Received 3 damage
- Received 6 damage
And so on. How can I do this?
I "code" using FlowCanvas so I also need to add the required TextMesh classes to FlowCanvas. For example in order to use the set_text property I had to add TMP_Text. This allowed me to access this:
And this is how my nodes look:
My second question is a bit more complicated I think. I want to do something like:
- Starting Food (X)
Where (X) is a variable I have set up in the same FlowCanvas controller. Those variables look like this:
Is there any way to do this?
I am traveling
I am traveling for most of the day but will get back to you when I stop for rest tonight.