Добавление устройства
Чтобы добавить новое устройство в симулятор устройства, создайте определение устройства и накладку устройства.
Определение устройства представляет собой текстовый файл с расширением .device в вашем проекте Unity. Он содержит JSON, который описывает свойства устройства.
Накладка устройства — это изображение, которое содержит границу экрана устройства вместе с выемками, отверстиями и любыми другими добавлениями к прямоугольнику экрана. Ее можно использовать вместе с определением устройства для визуализации того, как элементы оборудования препятствуют экрану устройства, и для определения, когда в результате этого сбой сенсорного ввода.
Примечание: Unity содержит встроенные определения устройств, которые представляют общие характеристики экрана (например, стили отверстий, положения отверстий и размеры экрана). Они предназначены для тестирования макета и моделей взаимодействия. Для производственного тестирования мы рекомендуем всегда проверять приложение на реальных целевых устройствах.
Создание определения устройства
Определение устройства представляет собой файл JSON, представляющий устройство. Он содержит как обязательные свойства, так и некоторые необязательные свойства. Если файл определения устройства содержит ошибки, они отображаются в файле Inspector при выборе файла.
Схема
| Свойство | Требуется | Описание |
|---|---|---|
| friendlyName | Да | Имя для отображения в UI для этого устройства. |
| версия | Да | Указывает версию файла определения устройства. В настоящее время это 1. |
| экраны | Да | Список объектов, каждый из которых описывает экран для имитации устройства. Этот список должен содержать по крайней мере один экран. Информацию о схеме каждого объекта экрана см. в экран. |
| systemInfo | Да | Объект, описывающий возможности устройства. Значения в этом объекте сопоставлены с SystemInfo. Информацию о схеме объекта systemInfo см. в systemInfo. |
экран
| Свойство | Требуется | Описание |
|---|---|---|
| ширина | Да | Ширина экрана в пикселях. |
| высота | Да | Высота экрана в пикселях. |
| navigationBarHeight | Нет | Высота в пикселях экранной панели навигации Android, которая отображается на некоторых устройствах, когда экран не полностью заполнен. |
| дп | Да | Разрешение экрана. |
| политики | Нет | Список объектов, каждый из которых описывает ориентацию, которую экран может имитировать. Если для этого свойства не установлено значение, экран поддерживает все ориентации. Информацию о схеме каждого объекта ориентации см. в ориентация. |
| представление | Нет | Объект, описывающий накладку устройства. Сведения о схеме этого объекта см. в разделе представление. |
ориентация
| Свойства | Требуется | Описание |
|---|---|---|
| ориентация | Да | Ориентация экрана. Значение этого свойства представляет собой число, которое сопоставляется с ScreenOrientation enum. |
| safeArea | Нет | Rect, определяющий безопасную область экрана. Если значение этого свойства не установлено, симулятор предполагает, что весь экран является безопасным. |
| вырезки | Нет | Список Rect, которые указывают области экрана, не функционирующие для отображения контента. |
представление
| Свойство | Требуется | Описание |
|---|---|---|
| overlayPath | Нет | Относительный путь от файла определения устройства к образу, используемому в качестве накладки устройства. |
| borderSize | Нет | Расстояние в пикселях от накладки до начала экрана. |
информация о системе
Свойства в этом объекте описывают возможности и системную информацию устройства. Поскольку они описывают системную информацию, многие из них сопоставляются со свойствами в SystemInfo.
| Свойство | Требуется | Описание |
|---|---|---|
| deviceModel | Нет | См. ,Device.SystemInfo.deviceModel,. |
| deviceType | Нет | См. ,Device.SystemInfo.deviceType,. |
| operatingSystem | Да | См. ,Device.SystemInfo.operatingSystem,. |
| operatingSystemFamily | Нет | См. ,Device.SystemInfo.operatingSystemFamily,. |
| processorCount | Нет | См. ,Device.SystemInfo.processorCount,. |
| processorFrequency | Нет | См. ,Device.SystemInfo.processorFrequency,. |
| processorType | Нет | См. ,Device.SystemInfo.processorType,. |
| supportsAccelerometer | Нет | См. ,Device.SystemInfo.supportsAccelerometer,. |
| supportsAudio | Нет | См. ,Device.SystemInfo.supportsAudio,. |
| supportsGyroscope | Нет | См. ,Device.SystemInfo.supportsGyroscope,. |
| supportsLocationService | Нет | См. ,Device.SystemInfo.supportsLocationService,. |
| supportsVibration | Нет | См. ,Device.SystemInfo.supportsVibration,. |
| systemMemorySize | Нет | См. ,Device.SystemInfo.systemMemorySize,. |
| unsupportedIdentifier | Нет | См. ,Device.SystemInfo.unsupportedIdentifier,. |
| graphicsDependentData | Нет | Список объектов, каждый из которых описывает графику APIs, поддерживаемую устройством. Информацию о схеме каждого объекта см. в graphicsDependentData. |
graphicsDependentData
Свойства в объекте описывают графику API, которую поддерживает устройство.
Минимальное определение устройства
Следующее определение устройства содержит все необходимые свойства и не содержит дополнительных свойств. Это минимальное определение устройства, которое можно иметь.
Примечание: Это определение устройства не предоставляет данные об ориентации, поэтому симулятор предполагает, что устройство поддерживает все ориентации и что безопасная зона охватывает весь экран.
{
"friendlyName": "Minimal Device",
"version": 1,
"screens": [
{
"width": 1080,
"height": 1920,
"dpi": 450.0
}
],
"systemInfo": {
"operatingSystem": "Android"
}
}
Полное определение устройства
Следующее определение устройства содержит все обязательные и необязательные свойства.
{
"friendlyName": "Apple iPhone XR",
"version": 1,
"screens": [
{
"width": 828,
"height": 1792,
"navigationBarHeight": 0,
"dpi": 326.0,
"orientations": [
{
"orientation": 1,
"safeArea": {
"serializedVersion": "2",
"x": 0.0,
"y": 68.0,
"width": 828.0,
"height": 1636.0
},
"cutouts": [
{
"serializedVersion": "2",
"x": 184.0,
"y": 1726.0,
"width": 460.0,
"height": 66.0
}
]
},
{
"orientation": 3,
"safeArea": {
"serializedVersion": "2",
"x": 88.0,
"y": 42.0,
"width": 1616.0,
"height": 786.0
},
"cutouts": [
{
"serializedVersion": "2",
"x": 0.0,
"y": 184.0,
"width": 66.0,
"height": 460.0
}
]
},
{
"orientation": 4,
"safeArea": {
"serializedVersion": "2",
"x": 88.0,
"y": 42.0,
"width": 1616.0,
"height": 786.0
},
"cutouts": [
{
"serializedVersion": "2",
"x": 1726.0,
"y": 184.0,
"width": 66.0,
"height": 460.0
}
]
}
],
"presentation": {
"overlayPath": "Apple iPhone 11_Overlay.png",
"borderSize": {
"x": 51.0,
"y": 51.0,
"z": 51.0,
"w": 51.0
}
}
}
],
"systemInfo": {
"deviceModel": "iPhone11,8",
"deviceType": 1,
"operatingSystem": "iOS 12.0",
"operatingSystemFamily": 0,
"processorCount": 6,
"processorFrequency": 0,
"processorType": "arm64e",
"supportsAccelerometer": true,
"supportsAudio": true,
"supportsGyroscope": true,
"supportsLocationService": true,
"supportsVibration": true,
"systemMemorySize": 2813,
"unsupportedIdentifier": "n/a",
"graphicsDependentData": [
{
"graphicsDeviceType": 16,
"graphicsMemorySize": 1024,
"graphicsDeviceName": "Apple A12 GPU",
"graphicsDeviceVendor": "Apple",
"graphicsDeviceID": 0,
"graphicsDeviceVendorID": 0,
"graphicsUVStartsAtTop": true,
"graphicsDeviceVersion": "Metal",
"graphicsShaderLevel": 50,
"graphicsMultiThreaded": true,
"renderingThreadingMode": 0,
"hasHiddenSurfaceRemovalOnGPU": true,
"hasDynamicUniformArrayIndexingInFragmentShaders": true,
"supportsShadows": true,
"supportsRawShadowDepthSampling": true,
"supportsMotionVectors": true,
"supports3DTextures": true,
"supports2DArrayTextures": true,
"supports3DRenderTextures": true,
"supportsCubemapArrayTextures": true,
"copyTextureSupport": 31,
"supportsComputeShaders": true,
"supportsGeometryShaders": false,
"supportsTessellationShaders": true,
"supportsInstancing": true,
"supportsHardwareQuadTopology": false,
"supports32bitsIndexBuffer": true,
"supportsSparseTextures": false,
"supportedRenderTargetCount": 8,
"supportsSeparatedRenderTargetsBlend": true,
"supportedRandomWriteTargetCount": 8,
"supportsMultisampledTextures": 1,
"supportsMultisampleAutoResolve": false,
"supportsTextureWrapMirrorOnce": 0,
"usesReversedZBuffer": true,
"npotSupport": 2,
"maxTextureSize": 16384,
"maxCubemapSize": 16384,
"maxComputeBufferInputsVertex": 8,
"maxComputeBufferInputsFragment": 8,
"maxComputeBufferInputsGeometry": 0,
"maxComputeBufferInputsDomain": 8,
"maxComputeBufferInputsHull": 8,
"maxComputeBufferInputsCompute": 8,
"maxComputeWorkGroupSize": 1024,
"maxComputeWorkGroupSizeX": 1024,
"maxComputeWorkGroupSizeY": 1024,
"maxComputeWorkGroupSizeZ": 1024,
"supportsAsyncCompute": false,
"supportsGraphicsFence": true,
"supportsAsyncGPUReadback": true,
"supportsParallelPSOCreation": true,
"supportsRayTracing": false,
"supportsRayTracingShaders": false,
"supportsInlineRayTracing": false,
"supportsSetConstantBuffer": true,
"hasMipMaxLevel": true,
"supportsMipStreaming": true,
"usesLoadStoreActions": true,
"supportedTextureFormats": [1, 2, 3, 4, 5],
"supportedRenderTextureFormats": [1, 2, 3, 4, 5],
"ldrGraphicsFormat": 59,
"hdrGraphicsFormat": 74
}
]
}
}
Создание наложения устройства
Накладка устройства — это изображение, которое содержит границу экрана устройства и другие элементы, такие как врезки, отверстия и любые другие добавления к прямоугольнику экрана. Ее можно использовать вместе с определением устройства для визуализации того, как элементы оборудования блокируют экран устройства, и для определения того, когда в результате этого не удается выполнить сенсорный ввод.
Симулятор устройства интерпретирует прозрачные пиксели как области экрана, на которые можно нажать, и непрозрачные пиксели любого другого цвета как области, которые блокируются аппаратным обеспечением. Текстура сама по себе может иметь любую форму.
В следующих примерах показаны накладки устройств для двух моделей iPhone.
Примечание: Чтобы имитировать то, что вы видите при использовании наложения устройства, в этих примерах отображается стандартный skybox Unity в области экрана, где вы можете нажать. В реальном наложении устройства эти пиксели должны быть прозрачными.
Использование накладки устройства
После создания накладной текстуры устройства для использования ее с определением устройства необходимо сначала импортировать файл текстуры накладки устройства в проект.
Примечание: Когда симулятор устройства загружает накладную текстуру устройства, он пытается включить Чтение/Запись для нее. Если это невозможно, симулятор устройства отображает текстуру, но не может использовать текстуру для маскирования ввода. Это означает, что если вы нажмете на выемки и другие области экрана, которые должны быть замаскированы накладкой устройства, симулятор устройства обнаружит ввод. Чтобы это не произошло, при импорте накладной текстуры устройства включите Чтение/Запись в окне Настройки импорта текстуры.
Когда текстура наложения устройства будет в вашем проекте, откройте файл определения устройства и в объекте, определяющем экран, который поддерживает устройство, добавьте свойство представление. Здесь установите путь к файлу изображения (overlayPath) и размер границ (borderSize). Пример того, как это сделать, см. в следующем файле определения устройства:
{
"friendlyName": "Minimal Device with Overlay",
"version": 1,
"screens": [
{
"width": 1080,
"height": 1920,
"dpi": 450.0,
"presentation": {
"overlayPath": "Overlays/MinimalDeviceOverlay.png",
"borderSize": {
"x": 51.0,
"y": 51.0,
"z": 51.0,
"w": 130.0
}
}
}
],
"systemInfo": {
"operatingSystem": "Android"
}
}
Примечание: Путь к файлу текстуры наложения устройства может быть относительным к файлу определения устройства или относительным к каталогу, содержащему текстуру наложения устройства. Активы или Пакеты каталог в вашем Unity проекта. Например, если файл определения устройства находится в папке Активы/устройства каталога, а файл наложения устройства находится в Активы/устройства/накладки каталоге, следующие пути к файлам являются действительными:
- Относительно файла определения устройства: Overlays/MinimalDeviceOverlay.png
- Относительно каталога, содержащего Активы каталог: Активы/устройства/накладки/MinimalDeviceOverlay.png