Get Texture2D from a Canvas in Unity? - unity3d

I am trying to post an image of my game hero to facebook. So I instantiate the prefab which contains number of UI elements, icons and texts.
I'd like to get a Texture2D or image data from it so I could send that as a payload to my facebook plugin.
If it was visible in camera and it wasn't a UI element I would get its texture from the camera, if I let it appear on the screen the full screen camera won't be looking at it, because it is rendered using canvas. Also canvas is also looking at other objects around it because this prefab doesn't occupy full screen.

I may be wrong but I don't think that you can render the UI on a texture. It doesn't seem ideal, but you could use CaptureScreenshot, then load the image and cut the part you want based on the resolution of Screen.

Related

How to stop Screen Space Overlay canvas from blocking UI button presses on World Space canvas?

I'm using Unity 2022.1.23f1 and the Universal Render Pipeline. I have a render texture, set to 480x270 with point filtering, to get a cool pixelated effect. In my scenes, I output the camera into the pixelated render texture and render it in a raw image under a Screen Space Overlay canvas. This makes it so that everything is rendered in 480x270.
Everything worked perfectly fine in the main gameplay, as there aren't any UI buttons to press. However, in my main menu scene I have three UI buttons for starting the game, accessing the options menu and quitting the game. The main menu is in 3D, featuring a desk with a monitor on it. I thought it would be cool to have the UI buttons look like they're on the monitor, which is why I made a World Space canvas, where I positioned the three UI buttons on the monitor.
I thought it would be easy to make the buttons interactable, but they don't work. I'm sure it's because the pixelation effect is blocking the UI buttons on the World Space canvas.
I removed the pixelation effect, along with the Screen Space Overlay canvas which holds it, and the buttons worked perfectly.
I googled the problem and found someone saying to remove the Graphic Raycaster component in the Scren Space Overlay Canvas, but that didn't work. I also turned off "Raycast Target" in the pixelation effect's raw image gameobject, but that also didn't work.
Is there any way to make it so that I can interact with the UI buttons in the World Space canvas, while also having the Screen Space Overlay canvas with the pixelation effect? Any help - or even suggestions to make a better pixelation effect - would be appreciated!

Image with material is rendered in the background of canvas

I'm making a thingy in Unity where you can upload an image (using NativeGallery) which rabs the path of the image and then you can load the Image from that path. Unfortunantly it is returned as 'Texture2d', so you can't just set it to be an Images sprite. Instead (so i figured) you can just give your image a material with that texture as 'mainTexture'. For that to work you need to set the Canvas settings to Screen Space - Camera, but as soon as the material is set it 'goes' into the background of all the items in the Canvas. The Button-Component which is atteched to it, stays in the foreground and is still inteactable but the material is in the background and not visible, unless no Object is over it, which is clearly not how it should be.
Google Drive Link to Video for probleme
Why? And How can you fix that?

Unity 3D screen stretched after applying low quality style texture

Overstretched Photo Frame Render texture settingsSo, basically, my problem is that my unity game, I want it to look like a PS1 era game, I made a render, and I made the size to 225x240. I also added a raw image so the camera can actually look, and I stretched it across the screen so the player could see the map on a full screen. Now comes the problem: Everything is stretched. The floor, the paintings, the table, etc,. All the 3D objects on the map are stretched. I would like to know why this happens and what I have to do to prevent it. I think it has something to do with raw image, as it is stretched. But I do not know how to directly fix it.
Raw Image stretch.

Canvas too big for the camera in Unity

I have created a 2D game with an orthogonal camera and using 16:9 display size.
I dragged my background image onto the hierarchy (it's about 2048x1152) and then set the camera size to be 22.5, which made it fit the background perfectly and displays just right.
However, when I add a Canvas for a UI it is absolutely giant, about 100 times bigger. It only becomes 'normal' size with respect everything else added when I set the camera to its default size of 5. So when I add a small graphic, it too becomes giant.
I'm simply following a book I read and I'm not doing anything to deviate.
Am I doing something wrong? Below is what I mean. The background image is the little image in the bottom right and the outlined rectangle is the canvas with a small graphic added.
Thanks.
To force your Hierarchy Canvas UI to the same resolution as the Camera View in your Unity Editor Scene window resolution (i.e. not ridiculously massive), or in other words get the Canvas to fit into the Camera size in the Scene, do the following:
Set the Canvas component's Render Mode to Screen Space - Camera.
Make sure you select or drag the relevant Camera from the Hierarchy to the Render Camera field in the Inspector.
You should use the Unity canvas for this along with the canvas scaler component. If I'm not mistaken it will scale all elements relative to the screen they are viewed on.
The canvas scaler allows you to match the scaling based on a preferred viewport size which is a life saver.
However this may not fit you needs perfectly as it would mean that the background element would become fixed. So if you wanted to pan the element you would need to move it's x and y elements within the canvas.
Hope that helps?

How to change canvas position in Unity?

I'm very new in Unity and in GameDevelopment at all. So I've started with Roll-a-Ball tutorial. And now I have a trouble with UI Lesson. When I create Text element Canvas parent creates in strange position.
But in lesson I see that Canvas is near Player object. How can I move it?
If you want to see the canvas fit inside your scene camera's view, change the Canvas's Render Mode to Screen Space - Camera; then drag the Main Camera onto the newly visible Render Camera field in the inspector.
See the bit in your canvas inspector about it being "screen space - overlay"?
That means:
"This render mode places UI elements on the screen rendered on top of the scene. "
And what THAT means, is that you don't have to worry about where the Canvas and child Text show up in your scene view. When you run the game the UI elements will overlay on the background world objects and it'll all be fine.
Source:
http://docs.unity3d.com/Manual/UICanvas.html
It shouldn't matter where the canvas is located, but you can select the child object called 'text' and change the X and Y values to move it around the screen. I hope this helps!