Jr Antonio
Jr Antonio

Reputation: 193

Calling my background Sprite to fill screen in Unity

I know that there are many questions like this on the net but I haven't found a solution to my problem yet...

I'm trying to make a background image that fills the screen. In my game, there is a canvas and inside this Canvas there is a gameObject which has attached the sprite component.

Many solutions includes this code:

void Awake()
{
    SpriteRenderer sr = GetComponent<SpriteRenderer>();
    if (sr == null) return;

    transform.localScale = new Vector3(1, 1, 1);

    float width = sr.sprite.bounds.size.x;
    float height = sr.sprite.bounds.size.y;

    double variable = Camera.main.orthographicSize * 4.0;
    float worldScreenHeight = (float)variable;
    float worldScreenWidth = worldScreenHeight / Screen.height * Screen.width;

    transform.localScale = new Vector2(worldScreenWidth / width, worldScreenHeight / height);
}

But I tried it and it makes the gameobject really small. Any ideas?

Upvotes: 1

Views: 8876

Answers (1)

Ehsan Mohammadi
Ehsan Mohammadi

Reputation: 1228

At first, select your Canvas game object. in Canvas Scaler component set UI Scale Mode to Constant Pixel Size.

enter image description here

Note that, when you set UI Scale Mode to Scale With Screen Size, your image changes by screen width or height.

Also, Note that your image should be in the center of its parent. Set the transform position and rotation of your image to this:

enter image description here

Now Change your code to this:

void Awake()
{
    SpriteRenderer sr = GetComponent<SpriteRenderer>();
    if (sr == null) return;

    transform.localScale = new Vector3(1, 1, 1);

    float width = sr.sprite.bounds.size.x;
    float height = sr.sprite.bounds.size.y;

    transform.localScale = new Vector2(Screen.width / width, Screen.height / height);
}

Hope it helps you.

Upvotes: 2

Related Questions