版本:Unity 6 (6000.0)
语言:英语
模拟类
扩展设备模拟器

添加设备

要向设备模拟器添加新设备,请创建设备定义和设备叠加。

设备定义是 Unity 项目中扩展名为 .device 的文本文件。它包含描述设备属性的 JSON。

设备叠加是一张包含设备屏幕边框、凹口、穿孔以及屏幕矩形任何其他附加内容的图像。可以选择将它与设备定义一起使用,以可视化硬件元素如何遮挡设备屏幕,以及确定触摸输入何时因其而失败。

创建设备定义

设备定义是一个表示设备的 JSON 文件。它既有必需属性,也有可选属性。如果设备定义文件包含任何错误,这些错误会在您选择该文件时显示在 检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 词汇表
中。

架构

属性 必需 描述
friendlyName 在此设备的 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 词汇表
中显示的名称。
version 指示设备定义文件的版本。当前,版本为 1
screens 每个对象描述一个屏幕的列表,用于模拟设备。此列表必须包含至少一个屏幕。有关每个屏幕对象的架构信息,请参见 screen
systemInfo 描述设备功能的对象。此对象中的值映射到 SystemInfo。有关 systemInfo 对象的架构信息,请参见 systemInfo

screen

属性 必需 描述
width 屏幕的宽度,以 像素计算机图像中最小的单位。像素大小取决于您的屏幕分辨率。每个屏幕像素都会计算像素灯光。 更多信息
参见 词汇表
为单位。
height 屏幕的高度,以像素为单位。
navigationBarHeight 某些设备在非全屏模式下显示的屏幕上 Android 导航栏的高度,以像素为单位。
dpi 屏幕的 dpi。
orientations 每个对象描述屏幕可以模拟的一个方向的列表。如果您未为此属性设置值,则屏幕支持所有方向。有关每个方向对象的架构信息,请参见 orientation
presentation 描述设备叠加的对象。有关此对象的架构信息,请参见 presentation

orientation

属性 必需 描述
orientation 屏幕方向。此属性的值是一个映射到 ScreenOrientation 枚举的数字。
safeArea 一个 Rect,它确定屏幕的安全区域。如果您未为此属性设置值,则模拟器会假定整个屏幕都是安全的。
cutouts 一个 Rect 列表,它指定屏幕上不能用于显示内容的区域。

presentation

属性 必需 描述
overlayPath 从设备定义文件到用作设备叠加的图像的相对路径。
borderSize 从叠加到屏幕开始位置的距离,以像素为单位。

systeminfo

此对象中的属性描述设备的功能和系统信息。由于它们描述了系统信息,因此它们中的许多都映射到 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 每个对象描述设备支持的图形 API 的列表。有关每个对象的架构信息,请参见 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 型号的设备叠加。

注意:为了模仿使用设备叠加时看到的内容,这些示例在您可以点击的屏幕区域显示 Unity 的默认 天空盒用于表示天空的特殊材质。通常为六面。 更多信息
参见 术语表
。在实际的设备叠加中,这些像素应该是透明的。

Apple iPhone 8 叠加 Apple iPhone XS 叠加

使用设备叠加

创建设备叠加纹理后,要将其与设备定义一起使用,您必须先将设备叠加纹理文件导入项目。

注意:当设备模拟器加载设备叠加纹理时,它会尝试为其启用读/写。如果不可行,设备模拟器会显示纹理,但无法使用纹理来遮罩输入。这意味着,如果您点击设备叠加应该遮罩的凹口和其他屏幕区域,设备模拟器会检测到输入。为了确保这种情况不会发生,当您导入设备叠加纹理时,在纹理导入设置窗口中启用读/写

当设备叠加纹理位于您的项目中时,打开设备定义文件,并在定义设备支持的屏幕的对象中添加 presentation 属性。在这里,设置图像文件的路径 (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 项目中的AssetsPackages 目录的目录。例如,如果设备定义文件位于Assets/Devices 目录中,而设备叠加文件位于Assets/Devices/Overlays 目录中,则以下文件路径均有效

  • 相对于设备定义文件:Overlays/MinimalDeviceOverlay.png
  • 相对于包含Assets 目录的目录:Assets/Devices/Overlays/MinimalDeviceOverlay.png
模拟类
扩展设备模拟器