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?
Related
I'm Following these steps
Follow these few steps to add texture as a camera background:
Create a new Canvas that would hold your image.
In that canvas, on Canvas component set:
Render Mode to Screen Space - Camera.
Render Camera to your main camera (drag&drop).
Plane Distance are the units, at which the background would render.
Right-click on the newly created canvas and create an Image inside of it.
On the newly created image on Image component:
Set Source Image to your desired background sprite.
and can't insert my background also
can anyone help ?
It maybe that you will have to use a raw Image instead of a normal image as I think .png files are not supported in a normal Image component
I have two canvas' set up for my project, one to act as a background and one to hold foreground UI elements. Originally they were set to world space, and I had no problems, but now I am optimizing my game, I must change the space so they adjust to mobile phones. How can I design the canvas' so that one acts in the background and the other in the foreground? I have tried changing the z-pos and other quick fixes I found online but none have worked.
Ok, you have background canvas, sprites and foreground canvas, and background canvas should be behind everything including sprites.
The idea is to render at first only background with one camera, and then render everything with another.
To do that, we should:
Add a layer for background canvas. Change layer of background canvas and children to that layer.
To add a layer, select any gameObject and in top of the inspector you will see:
Click on a dropdown list labeled "Layer" and select "Add Layer". Then create new layer and give it a name:
Select your background canvas and change layer for it and its children. When adding gameObjects, keep in mind that if you add them to background canvas, their layer must be the same as the layer of canvas, otherwise they will be rendered by the wrong camera.
Disable that layer in main camera's culling mask.
Now the camera should no longer render background UI, and it will disappear in the game view.
Add a camera for rendering background UI.
Cameras with higher depth render on top of those with lower depth, so we should set its depth to less than depth of main camera. We should also set its culling mask to only layer for background UI, otherwise all objects on scene will be rendered twice. Copy other setting from main camera. Set main camera's clear mode to Don't Clear or Depth Only to prevent it from erasing background.
Set mode of the background canvas to Screen Space - Camera and drag newly created camera into field "Render Camera" there.
It should work now.
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?
I got a little problem with my Unity's canvas. I can't set the background image.I've added the Image component to the canvas and I've tried drag the image from the assets to Source Image, but it doesn't allowed that.
You have to set the image to a Sprite (2D and UI) in order to use it in the canvas. This is done by selecting the image in the Project window and making the change in the Inspector window, from the Texture Type dropdown. Make sure you hit apply once you have completed the changes.
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.