How to add text to surfaces of complex 3D models in Unity3D? - unity3d

I would like to add small text, less than 10 letters to the surfaces of complex 3D models, such as a person model or a building.
One way is to add the image texture to a material, and then add the material to the model. But by this way I can not control where the text will be placed. For example, if I use the material with a text texture to a cube, all the 6 surfaces will display the text. This is what I don't want it be. I just need the text displayed only once, wherever it is.
What I need is just to add some text on the surface anywhere, even randomly.
Can I realize this by Unity itself without other softwares like Maya, Photoshop?
Thanks!

Try using a text mesh and a text renderer ...
http://docs.unity3d.com/Manual/class-TextMesh.html
As always with unity there's a tool for that :)

Related

How to use multiple render textures and cameras?

I simply need to write text on 3D sphere. But I want to change it at runtime as I want. So, using a premade material is not an option.
I tried to make this with render texture it works pretty well but when it comes to multiple objects with multiple different text I noticed I need multiple render textures, cameras and layers so that the texts in front of the cameras do not interfere with each other. But unity gives only 32 layers. I don't know how many object will be generated and create layer. It doesn't seem like a good practice.
Is there another way like render texture or is there a way to use render texture for different texts?

What is a good way to have a 2d battle royal circle with an adjustable center and radius in Unity?

I am having trouble creating a battle royal zone in unity. I want it to be translucent and cover the map with a masked circle in the middle. However, I dont know if there is any way to control the radius of this mask which is something I need to do regularly. Does anyone know how to achive these results?
It should look like the the map view from Fortnite BR.(https://assets.rockpapershotgun.com/images/2019/01/fortnite-small-storm-690x388.jpg/RPSS/resize/690x-1/format/jpg/)
There are a few ways to achieve this effect.
The first and easiest is using the built in Mask, if you are using UI to render the minimap. You can also create a custom UI mesh, as described here for example.
The last option is a (custom) shader. You can download the built-in shaders here and copy over the UI one. Then you have to add your own logic to the fragment shader, something that looks for the Length of the distance of the current UV coordinates and the circle, and if thats smaller than the radius it must be inside. In that case, either clip or set the alpha to 0.

Trouble with using Text Mesh in Unity

So the problem is that I want create such an idea. There are a table and a sheet of paper (just a Plane). I want to place some text on this sheet of paper. I read about Text Mesh and I thought that I would use it but I had a problem about it. I need to limit my text on this sheet of paper but I haven't found any borders I can place there. How can I set borders to Text Mesh? Or are there any decision I can use to handle this situation?
TextMesh does not have borders
Instead, you are probably interested in a World Space Canvas and using UI text instead. Unity has a great tutorial in the manual for setting up a world space canvas, which pretty much amounts to "set the Canvas to world space, decide on a resolution, decide on a in-game size, and position it."
For text, you actually have two options: UI Text and Text Mesh Pro. TMP used to be an asset on the asset store, but Unity has integrated it into a semi-standard package now (just create a TMP object and you'll be prompted to do the importing). TMP has several additional features and options that standard UI Text does not have, including in-line sprites, margins, text alignment, better rich-text, and so on. It might be overkill, but it is available.

Unity3D - Make texture edges not stretch

I've been searching around for this one for a bit, and unfortunately I can't seem to find any good, consistent results. So, in the Unity UI system, buttons can stretch without becoming pixelated or distorted. This is because the texture is split up into 9 parts - the corners, middle, and sides.
This works because the button's middle and sides are stretched, but not the corners. Then, the button appears not pixelated, at any dimension.
So, the question is as follows: How can I do the same thing for a transparent, unlit texture in 3D space? I have a speech bubble texture on a flat plane that I know how to re-scale to fit the text in the speech bubble.
I've set the texture type to Multiple Sprite, and divided it up into 9 parts. However, I cannot seem to find where I can set the texture to act like the UI button does, and I'm not sure that this is even possible in this way in 3D space.
Is there a way, or should I just make the different parts of the texture different objects, and move them together? That would seem very inefficient and ugly compared to this.
To accomplish what you are asking, you would need to create tiles for this speech bubble and then write a script that procedurally builds a speech bubble based on the plane's scale value. You could also try just changing the texture's Filter Mode to Point.
However I really don't think you should be using textures for this anyway. Why not just use a Unity Canvas and set the Render Mode to World Space? Then you can just set your text box to be a sprite, not a texture, and set its filter mode to Point (See below). This would also make it a lot easier for when you want there to be text in the speech bubble later on.

How to draw marks on Unity 3D plane?

I am new to Unity. Sorry if I have a beginner style of question.
I want to implement a 3D Chess game in Unity. I have already implemented a C++ shared library that contains the whole AI thing. I have used this library in WPF and Android and it is tested perfectly. Now it is Unity's turn.
When the user selects a piece, next moves of it should be shown.
These marks can be a light or image. Circular or rectangle.
One way to do this is to have 64 marks per each square of the Chess board and change their visibility programmatically.
The other way, which I personally prefer, is to draw the marks programmatically. But I don't know how to draw on my Chessboard plane.
Please guide me with it.
FINAL RESULT (Just a sketchup!)
STEP BY STEP:
(I assume you have already had a chessboard)
1. Create a Material & configure it like in the below image. Note that the albedo green is 50% transparent:
2. Create a Quad & assign it the newly created Material above. Then set
it up like in the below image:
3. Now we will add the glow effect. First, we need to turn off the
Anti-Aliasing by switching to Good Quality instead of Fantastic.
4. Second, we need to enable HDR in the main camera:
5. Third, we need to import the Image Effects package. This package
is part of the Standard Assets that is shipped with Unity. It is
completely free. Get it here if you haven't.
https://www.assetstore.unity3d.com/en/#!/content/32351
You only need the Image Effect package.
6. Now add the Bloom effect to your main camera.
7. That's it! If you need to hide it via code then get the reference to
it and execute this line of code:
yourQuad.SetActive(false);
See more here:
https://docs.unity3d.com/ScriptReference/GameObject.SetActive.html
8. Finally, duplicate that quad to create 64 ones & position them
properly. There are 2 tricks that can help your life in hell a lot
easier:
To quickly duplicate a group of objects: select all of them and press: Ctrl + D
To enable edge-snap: select your quad and hold down V then hover your mouse over the quad's vertex. You will see a white square around it. Drag that vetex and see the magic.
9. From this on, it is your game logic to implement. You could store
all the quads in a 2-dimensional array (matrix) and manipulate it
yourself, that it all I can think of. Goodluck!