Как я делаю скриншоты для 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");
}
}
