Как сделать картинку (панель) на весь экран?

Есть картинка ("панель"). При активации объекта она должна растягиваться и занимать весь экран.

65088f8180ef0911000705.jpeg

Код ниже устанавливает размер панели.
На разрешении 1920x1080 (вызываю в юнити метод ChangeResolution) панель растягивается на весь экран.
На разрешении 1152x864 (когда по бокам экрана черные полосы) - панель заполняет центральную часть экрана, оставляя по краям пустое пространство.

Отладка показывает, что передается верное разрешение для установки размера панели.

Как сделать картинку (панель) на весь экран?

public class DialogWindowController : MonoBehaviour
{
    private GameObject backgroundPanel;
    RectTransform backgroundPanelRectTransform;


    void OnEnable()
    {
        // Получаем ссылку на панель и устанавливаем её размер на весь экран.
        backgroundPanel = transform.Find("BackgroundPanel").gameObject;
        backgroundPanelRectTransform = GetComponent<RectTransform>();
        backgroundPanelRectTransform.sizeDelta = new Vector2(Screen.currentResolution.width, Screen.currentResolution.height);

        // Отладка. Разрешение совпадает с реальным. Всё верно.
        string str = Screen.currentResolution.width + "x" + Screen.currentResolution.height;
        Debug.Log(str);
        using (StreamWriter writer = new StreamWriter("test.txt"))
        {
            writer.WriteLine(str);
        }
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Тут есть несколько моментов.

1. Перевожу на русский, что вы пытаетесь сделать:
Взять текущее разрешение экрана (не окна Game, а именно что экрана) - что значит, что у вас в консоли должно выводиться 1920x1080 даже при 1152x864. Если вам нужен размер именно окна Game, то его размеры такие:
int screenWidth = Screen.width;
int screenHeight = Screen.height;


2. Единственный сценарий зачем это всё может быть надо что пришёл мне в голову - вы хотите заблочить клики вне диалогового окна за счёт непрозрачного для нажатий фона, но так как фон находится в префабе, вам приходится мучаться с его растяжением на весь экран.
Если я вдруг не ошибся, то есть решение проще.
Решение:

Создаёте префаб изначально растянутый на весь экран. Внутри него создаёте пустой объект, который и будете включать и выключать, опять же, растянутый на весь экран. А внутри уже нужный вам фон (тоже растянутый) и панелька с текстом и кнопками.
Таким образом вам достаточно просто включать выключать пустышку, которая будет работать и с фоном и с панелькой. Вот пример:
650a16e0729f0813232153.png


3. Непрошенный совет. Это касается не столько функциональности, сколько архитектуры кода. Если вы хотите качественно улучшить скрипты, попробуйте по мере возможности сразу хардкодить ссылки, тем более что это части одного объекта.
Вот пример:

Было
public class DialogWindowController : MonoBehaviour {

	private GameObject backgroundPanel;
	RectTransform backgroundPanelRectTransform;

	void OnEnable() {
		// Получаем ссылку на панель и устанавливаем её размер на весь экран.
		backgroundPanel = transform.Find("BackgroundPanel").gameObject;
		backgroundPanelRectTransform = GetComponent<RectTransform>();
		backgroundPanelRectTransform.sizeDelta = new Vector2(Screen.currentResolution.width, Screen.currentResolution.height);

		// Отладка. Разрешение совпадает с реальным. Всё верно.
		string str = Screen.currentResolution.width + "x" + Screen.currentResolution.height;
		Debug.Log(str);
		using (StreamWriter writer = new StreamWriter("test.txt")) {
			writer.WriteLine(str);
		}
	}
}


Стало:
public class DialogWindowController : MonoBehaviour {

	[SerializeField] private RectTransform _background;

	void OnEnable() {
		_background.sizeDelta = new Vector2(Screen.currentResolution.width, Screen.currentResolution.height);

		// Отладка. Разрешение совпадает с реальным. Всё верно.
		string str = Screen.currentResolution.width + "x" + Screen.currentResolution.height;
		Debug.Log(str);
		using (StreamWriter writer = new StreamWriter("test.txt")) {
			writer.WriteLine(str);
		}
	}
}


Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы