Multiple canvasses is necessary for rendering full UI (with text and images) in world-space, and in screen-space as part of a “single” UI, multiple canvases prevents needing to do a complete redraw for the entire UI every time a single UI element changes. This is why Unity recommends using several canvases.
Having multiple 3D canvases in a scene means they won’t batch together on the GPU. They aren’t even capable of dynamic batching like world-space TMP text are. That means (at least) 1 draw call per canvas. Canvases also require far more CPU resources to render than 3D text.
To demonstrate this with a test, I generated 100 canvases with UI text mesh components and spaced them out on the screen. It ran at about 960 fps. The I did the same thing but with 100 3D TMP texts. That ran at 1270 fps. When I check the two tests with the profile analyzer, I can see that the version using canvases is using a lot of resources on PlayerLoop, UGUI.Rendering.EmitWorldScreenSpaceCameraGeometry, PostLateUpdate.PlayerUpdateCanvases, UGUI.Rendering.UpdateBatches and UIEvents.WillRenderCanvases. These are all resources that the 3D text doesn’t need to spend. This test was done with no dynamic batching, so 3D TMP text wasn’t even benefitting from that and both tests had 101 batches.
With that all said, I’d like to avoid trying to rely on dynamic batching, so I’m trying to find a good alternative.
Edit: Oh and that’s forgetting to mention that I can’t get lighting and shadows while using world-space canvases.
Does Modular 3D text use anchors, or does it have some kind of a feature for responsive design? How should we account for UI on different screen resolutions?
The 3D text is on the the world space, not on the canvas. So, it doesn’t support any built-in solution for responsive design.
It CAN be used on the canvas just like any other 3d meshes but that comes with the same advantage/disadvantage of using a cube mesh on UI. Because the asset creates 3D meshes.
I have personally used it with camera render texture for responsive design but I wouldn’t call it supporting canvas, since that introduces unnecessary render time and extra hassle to set-up.
Sorry, there is no way built in way to do that.
For my personal project I use a outline Shader. You can find a lot of them for free. The texts support most shaders.
The current version of the asset store doesn’t support the new input system.
I am currently working on a new version that supports it and quite a new feature like supporting more languages. The minimum input system package requirement is 1.1.0-pre.6
The current main to-do for the new version is updating documentation.
If you would like, I can provide it. Drop me a mail at: asifno13@gmail.com with your invoice number.
Just updated to latest and the problem is still present.
It’s very odd, I deleted all objects in the scene, saved and reopened it and there’s still this SALE text present, but it doesn’t happen on a brand new scene.
It turns out SALE is from one of our own prefabs, but it’s a prefab that is not added to the scene, and the same issue has happened to our artist with some of the other text prefabs as well. I dug into the scene file and found out it has some GameObjects that are somehow not shown in the editor.
I believe the issue presents itself when a project is reimported.
For now I’ll try to just manually remove the unnecessary gameobjects from my scene file.
Hi,
My sincere apology for the error. That sounds like a very old bug. I am not sure why that is reappearing. There was a unity package manager bug that would download old versions of assets.
Can you check Tools>Tiny Giant Studio>Modular 3D Text for the version number? If that’s 2.2.2.
I am looking into what could cause the issue to reappear in the current version.
Explanation of what could be happening:
Unity has a feature, Hide flag for objects that can be set to make objects invisible in hierarchy amongst other things. In one older version of the asset, this was turned on by default for the editor when combining texts, which would cause this bug. The option was under advanced settings > Hide letters in editor.
This feature has completely been removed from newer versions because I didn’t find anyone that actually used it and currently is only for playtime now.
To make every hidden object visible in the hierarchy, you can use this script: Link
[This is the largest update yet.] Version 3.0.0
Please completely remove the old asset from your project before updating it. I suggest updating only if you have some time or are on a new project.
Better Single Mesh workflow: The new workflow massively improves the in-editor experience and prefab interaction.
Layout systems overhaul: The layout system is separate from the rest now. So, it is easier to reuse it and create custom layout systems to fit your need. They can be used for any usage, even outside the UI/text system like creating a row of tiles, fences, and buildings.
Better language support: 3D Fonts now keep the data from the original TTF file. So, missing characters can be created at runtime. This means improper character range input is less punishing. In the previous version of the asset, it couldn’t handle languages like Korean/Chinese because combined letters weren’t included in the 3d font because there are too many of them to hold individually. But, now it can generate them when needed as long as the original file data is kept.
Better spacing: In previous versions, the asset would use character bounds to set the position of each character. This would often create a different look than its 2d counterpart. Now, this is moved to a setting that can be turned on/off and by default, the font will use the original “advance”/spacing specified in the TTF file for positioning.
New input System Support Added
Module systems overhaul: Modules are easier to modify for each instance. It also improves the inspector for custom modules.
Individual character control: There are more options to modify how each character looks by selecting the 3D font file.
Removed built-in pooling.
A lot of new prebuilt fonts were added.
UI improvements.
Unimportant stuff is hidden from sample scenes now.
Bugfix: Fixed an instance where texts were setting the scene dirty for no reason.
1, Are the fonts in this package arectotally free to use in my commercial project?
2, Is it support Hungarian accents, like á, é, etc?
3, Can I use this 3d fontos onky on 3d world or can I use itbis an UI Layer that is 2d?
4, I want a 3d font that has colliders on it, lets say the “CINEMA” world in 3d world.
First all the letters have a collider but when something collie let’s say the M letter than the letter’s rigidbody become usegravity=true, static=false. Is it possible? The “M” letters collider will be a simple box collider or a Mesh collider?
5, After the change made, any way to reset back the positions of the letters?
Yes, the fonts are all open source. You can use them however you want.
Some fonts support them now. Each font is different.
Yes, the text is usable in the 3D world
You can treat all the characters as separate objects if you turn off the single mesh.
The situation you are describing requires you to make your own custom script to work. The script will work the same as trying to make it work with a cube. The characters are just “meshfilters”.
You can reset their position. If they are still child objects of the text, call UpdateLayout() method on the LayoutGroup component to reset the position.
Hey I bought your asset. But I need to create a HUGE word in 3d world, and my player need to collide with it (it is a 2D/2.5D game) When I add the Add_Physics module nothing happen, I don’t see any Collider on that. Only when I set the “Enable Gravity”
So how can I collide with the 3d text (only 1 letter) and then when colliding the use gravity set to true?
Also how can I freeze the X, Y, or Z constraint?
Hi,
Modules only work during runtime.
For the editor, you can just delete the Text creator+ layout component and do whatever you wish with the individual characters. They are just meshes.
Add physics module works without the Enable Gravity option. This is the default value you get when adding a rigid body component.