Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход
Разработка платформы Шаг 21 из 387

Добавление устройства

Чтобы добавить новое устройство в симулятор устройства, создайте определение устройства и накладку устройства.

Определение устройства представляет собой текстовый файл с расширением .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, которую поддерживает устройство.

Свойство Требуется Описание
graphicsDeviceType Да См. ,Device.SystemInfo.graphicsDeviceType,.
graphicsMemorySize Нет См. ,Device.SystemInfo.graphicsMemorySize,.
graphicsDeviceName Нет См. ,Device.SystemInfo.graphicsDeviceName,.
graphicsDeviceVendor Нет См. ,Device.SystemInfo.graphicsDeviceVendor,.
graphicsDeviceID Нет См. ,Device.SystemInfo.graphicsDeviceID,.
graphicsDeviceVendorID Нет См. ,Device.SystemInfo.graphicsDeviceVendorID,.
graphicsUVStartsAtTop Нет См. ,Device.SystemInfo.graphicsUVStartsAtTop,.
graphicsDeviceVersion Нет См. ,Device.SystemInfo.graphicsDeviceVersion,.
graphicsShaderLevel Нет См. ,Device.SystemInfo.graphicsShaderLevel,.
graphicsMultiThreaded Нет См. ,Device.SystemInfo.graphicsMultiThreaded,.
renderingThreadingMode Нет См. ,Device.SystemInfo.renderingThreadingMode,.
hasHiddenSurfaceRemovalOnGPU Нет См. ,Device.SystemInfo.hasHiddenSurfaceRemovalOnGPU,.
hasDynamicUniformArrayIndexingInFragmentShaders Нет См. ,Device.SystemInfo.hasDynamicUniformArrayIndexingInFragmentShaders,.
supportsShadows Нет См. ,Device.SystemInfo.supportsShadows,.
supportsRawShadowDepthSampling Нет См. ,Device.SystemInfo.supportsRawShadowDepthSampling,.
supportsMotionVectors Нет См. ,Device.SystemInfo.supportsMotionVectors,.
supports3DTextures Нет См. ,Device.SystemInfo.supports3DTextures,.
supports2DArrayTextures Нет См. ,Device.SystemInfo.supports2DArrayTextures,.
supports3DRenderTextures Нет См. ,Device.SystemInfo.supports3DRenderTextures,.
supportsCubemapArrayTextures Нет См. ,Device.SystemInfo.supportsCubemapArrayTextures,.
copyTextureSupport Нет См. ,Device.SystemInfo.copyTextureSupport,.
supportsComputeShaders Нет См. ,Device.SystemInfo.supportsComputeShaders,.
supportsGeometryShaders Нет См. ,Device.SystemInfo.supportsGeometryShaders,.
supportsTessellationShaders Нет См. ,Device.SystemInfo.supportsTessellationShaders,.
supportsInstancing Нет См. ,Device.SystemInfo.supportsInstancing,.
supportsHardwareQuadTopology Нет См. ,Device.SystemInfo.supportsHardwareQuadTopology,.
supports32bitsIndexBuffer Нет См. ,Device.SystemInfo.supports32bitsIndexBuffer,.
supportsSparseTextures Нет См. ,Device.SystemInfo.supportsSparseTextures,.
supportedRenderTargetCount Нет См. ,Device.SystemInfo.supportedRenderTargetCount,.
supportsSeparatedRenderTargetsBlend Нет См. ,Device.SystemInfo.supportsSeparatedRenderTargetsBlend,.
supportedRandomWriteTargetCount Нет См. ,Device.SystemInfo.supportedRandomWriteTargetCount,.
supportsMultisampledTextures Нет См. ,Device.SystemInfo.supportsMultisampledTextures,.
supportsMultisampleAutoResolve Нет См. ,Device.SystemInfo.supportsMultisampleAutoResolve,.
supportsTextureWrapMirrorOnce Нет См. ,Device.SystemInfo.supportsTextureWrapMirrorOnce,.
usesReversedZBuffer Нет См. ,Device.SystemInfo.usesReversedZBuffer,.
npotSupport Нет См. ,Device.SystemInfo.npotSupport,.
maxTextureSize Нет См. ,Device.SystemInfo.maxTextureSize,.
maxCubemapSize Нет См. ,Device.SystemInfo.maxCubemapSize,.
maxComputeBufferInputsVertex Нет См. ,Device.SystemInfo.maxComputeBufferInputsVertex,.
maxComputeBufferInputsFragment Нет См. ,Device.SystemInfo.maxComputeBufferInputsFragment,.
maxComputeBufferInputsGeometry Нет См. ,Device.SystemInfo.maxComputeBufferInputsGeometry,.
maxComputeBufferInputsDomain Нет См. ,Device.SystemInfo.maxComputeBufferInputsDomain,.
maxComputeBufferInputsHull Нет См. ,Device.SystemInfo.maxComputeBufferInputsHull,.
maxComputeBufferInputsCompute Нет См. ,Device.SystemInfo.maxComputeBufferInputsCompute,.
maxComputeWorkGroupSize Нет См. ,Device.SystemInfo.maxComputeWorkGroupSize,.
maxComputeWorkGroupSizeX Нет См. ,Device.SystemInfo.maxComputeWorkGroupSizeX,.
maxComputeWorkGroupSizeY Нет См. ,Device.SystemInfo.maxComputeWorkGroupSizeY,.
maxComputeWorkGroupSizeZ Нет См. ,Device.SystemInfo.maxComputeWorkGroupSizeZ,.
supportsAsyncCompute Нет См. ,Device.SystemInfo.supportsAsyncCompute,.
supportsGraphicsFence Нет См. ,Device.SystemInfo.supportsGraphicsFence,.
supportsAsyncGPUReadback Нет См. ,Device.SystemInfo.supportsAsyncGPUReadback,.
supportsParallelPSOCreation Нет См. ,Device.SystemInfo.supportsParallelPSOCreation,.
supportsRayTracing Нет См. ,Device.SystemInfo.supportsRayTracing,.
supportsRayTracingShaders Нет См. ,Device.SystemInfo.supportsRayTracingShaders,.
supportsInlineRayTracing Нет См. ,Device.SystemInfo.supportsInlineRayTracing,.
supportsSetConstantBuffer Нет См. ,Device.SystemInfo.supportsSetConstantBuffer,.
hasMipMaxLevel Нет См. ,Device.SystemInfo.hasMipMaxLevel,.
supportsMipStreaming Нет См. ,Device.SystemInfo.supportsMipStreaming,.
usesLoadStoreActions Нет См. ,Device.SystemInfo.usesLoadStoreActions,.

Минимальное определение устройства

Следующее определение устройства содержит все необходимые свойства и не содержит дополнительных свойств. Это минимальное определение устройства, которое можно иметь.

Примечание: Это определение устройства не предоставляет данные об ориентации, поэтому симулятор предполагает, что устройство поддерживает все ориентации и что безопасная зона охватывает весь экран.

{
    "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.

iPhone 8 накладка, показывая Unity по умолчанию skybox заполнения области iPhone 8 экрана, где вы можете нажать
iPhone 8 накладка, показывая Unity по умолчанию skybox заполнения области iPhone 8 экрана, где вы можете нажать
iPhone XS накладка, показывая Unity по умолчанию skybox заполнения области iPhone XS экрана, где вы можете нажать
iPhone XS накладка, показывая Unity по умолчанию skybox заполнения области iPhone XS экрана, где вы можете нажать

Примечание: Чтобы имитировать то, что вы видите при использовании наложения устройства, в этих примерах отображается стандартный 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