Как я делаю скриншоты для App Store
/Когда вы добавляете игру в Apple App Store или Google Play Store, вам нужны снимки экрана в разных размерах. На скриншотах показано, как игра выглядит на различных телефонах и планшетах разных размеров.
Делайте скриншоты Unity в нескольких размерах одновременно
В Unity я написал скрипт для создания скриншотов сборки ПК. Я могу указать список размеров для любого количества снимков экрана и расположение папки для их сохранения.
В сборке ПК, когда я щелкаю правой кнопкой мыши, игра приостанавливается, устанавливая для Time.timescale значение 0, затем изменяется размер окна игры до первого размера в моем списке, например 800x600, он ждет некоторое время, чтобы пользовательский интерфейс мог обновиться. это позиция, затем он сохраняет снимок экрана в виде файла PNG, переходит к следующему размеру в моем списке и повторяет это до тех пор, пока не будут сделаны все нужные мне снимки экрана. После этого игра возобновляется, устанавливая Time.timescale обратно в 1.
Сделайте снимок экрана Unity, размер которого превышает размер дисплея.
Проблема, которую я обнаружил, заключалась в том, что и Windows, и Mac не позволяли игре иметь ширину или высоту, превышающую размер моего дисплея. Мой дисплей имеет разрешение 3440x1440, и мне нужен был снимок экрана с разрешением 2732x2048, но я получал снимок экрана с разрешением 2732x1440. Я считаю, что это не будет проблемой для дисплея 4K, нескольких дисплеев, расширяющих рабочий стол, или, возможно, для виртуального рабочего стола.
Решение, которое я нашел, заключалось в использовании моей видеокарты. В панели управления Nvidia я сделал поддельное пользовательское разрешение 6880х2880, после чего смог делать скриншоты. Появилось всплывающее предупреждение о том, что это может повредить ваш дисплей, поэтому будьте осторожны, если попробуете, но у меня все сработало.
Вот сценарий, который я написал:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class screenShot : MonoBehaviour { // Экземпляр Singleton для быстрого доступа из других скриптов. public static screenShot instance; // Флаг для включения/отключения функции создания снимков экрана public bool takeScreenshots = false; // Место по умолчанию для сохранения снимков экрана //Windows// public string screenshotLocation = "C:\\Users\\yourName\\Desktop\\screenshots"; //Mac// //public string screenshotLocation = "/Users/yourName/Desktop/screenshots"; // Массив разрешений для переключения при создании снимков экрана public string[] resolutions;//640x480 etc; // Частные переменные для отслеживания размеров экрана и процесса создания снимков экрана private int width; private int height; private int screenN; private bool scalingScreen = false; private bool takingScreens = false; private float waitF; // Шаблон Singleton, обеспечивающий существование только одного экземпляра void Awake() { if (instance) { // Уничтожить повторяющиеся экземпляры Destroy(gameObject); } else { // Установите экземпляр для этого объекта и сохраняйте его в разных сценах. instance = this; DontDestroyOnLoad(gameObject); } } // Установите разрешение экрана на основе предоставленной строки public void setXY(string _res)//separated ints with x// { // Разделите строку разрешения на ширину и высоту. string[] splitNs = _res.Split('x'); width = int.Parse(splitNs[0]); height = int.Parse(splitNs[1]); // Установите разрешение экрана Screen.SetResolution(width, height, false); } // Обновление вызывается один раз для каждого кадра void Update() { // Проверьте, включена ли функция создания снимков экрана if (takeScreenshots) { // Начинайте делать снимки экрана при нажатии правой кнопки мыши. if (!takingScreens) { if (Input.GetMouseButtonDown(1)) { // Воспроизвести звуковой эффект //soundManager.sound.playSFX(26); // Инициализируйте переменные для создания снимков экрана screenN = 0; scalingScreen = true; takingScreens = true; Time.timeScale = 0f; } } // Масштабируйте разрешение экрана else if (scalingScreen) { if (Time.realtimeSinceStartup > waitF) { // Установите разрешение экрана и время ожидания обновления. setXY(resolutions[screenN]);//разрешение не обновится до следующего кадра// waitF = Time.realtimeSinceStartup + 2f; scalingScreen = false;// Остановить масштабирование } } //делать скриншоты// else { if(Time.realtimeSinceStartup > waitF) { // Сделать снимок экрана takeScreenshot(screenN); // Проверьте, есть ли еще экраны для захвата if (screenN + 1 < resolutions.Length) { screenN++; scalingScreen = true;// Начать масштабирование для следующего разрешения waitF = Time.realtimeSinceStartup + 2f; } //закончил делать скриншоты else { takingScreens = false; Time.timeScale = 1f;// Возобновить игру } } } } } // Захват скриншота с заданным индексом в массиве разрешений void takeScreenshot(int _num) { // Сохраните снимок экрана с именем файла, содержащим разрешение и метку времени. ScreenCapture.CaptureScreenshot(screenshotLocation + "\\haunt"+ resolutions[_num]+"_"+System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".png"); } }