기기 시뮬레이터에 새 기기를 추가하려면 기기 정의와 기기 오버레이를 생성합니다.
기기 정의는 Unity 프로젝트에서 확장자가 .device인 텍스트 파일입니다. 여기에는 기기의 프로퍼티를 설명하는 JSON 파일이 포함됩니다.
기기 오버레이는 기기 화면의 테두리와 노치, 펀치아웃 및 사각형 화면에 추가되는 기타 요소를 포함하는 이미지입니다. 이를 필요에 따라 기기 정의와 함께 사용하여 하드웨어 요소가 기기 화면을 가로막는 방식을 시각화하고 이를 통해 터치 입력이 작동하지 않는 지점을 결정할 수 있습니다.
기기 정의는 기기를 나타내는 JSON 파일입니다. 여기에는 필수 프로퍼티와 일부 선택적 프로퍼티가 모두 들어 있습니다. 기기 정의 파일에 오류가 있으면 해당 파일을 선택할 때 인스펙터에 오류가 표시됩니다.
| 프로퍼티 | 필수 | 설명 |
|---|---|---|
| friendlyName | 지원 | 기기의 UI에 표시할 이름입니다. |
| version | 지원 | 기기 정의 파일의 버전을 나타냅니다. 현재 버전은 1입니다. |
| screens | 지원 | 기기를 시뮬레이션할 화면을 각각 설명하는 오브젝트 리스트입니다. 여기에는 하나 이상의 화면이 포함되어야 합니다. 각 화면 오브젝트의 스키마에 대한 자세한 내용은 화면을 참조하십시오. |
| systemInfo | 지원 | 기기의 기능을 설명하는 오브젝트입니다. 이 오브젝트의 값은 SystemInfo에 매핑됩니다. systeminfo 오브젝트의 스키마에 대한 상세 내용은 systeminfo를 참조하십시오. |
| 프로퍼티 | 필수 | 설명 |
|---|---|---|
| width | 지원 | 화면의 너비(픽셀 단위)입니다. |
| height | 지원 | 화면의 높이(픽셀 단위)입니다. |
| navigationBarHeight | 지원 안 함 | 전체 화면이 아닐 때 일부 기기 화면에 표시되는 Android 내비게이션 바의 높이(픽셀 단위)입니다. |
| dpi | 지원 | 화면의 dpi입니다. |
| orientations | 지원 안 함 | 화면이 시뮬레이션할 수 있는 방향을 각각 설명하는 오브젝트 리스트입니다. 이 프로퍼티의 값을 설정하지 않으면 화면이 모든 방향을 지원합니다. 각 방향 오브젝트의 스키마에 대한 자세한 내용은 방향을 참조하십시오. |
| presentation | 지원 안 함 | 기기 오버레이를 설명하는 오브젝트입니다. 이 오브젝트의 스키마에 대한 상세 내용은 프레젠테이션을 참조하십시오. |
| 프로퍼티 | 필수 | 설명 |
|---|---|---|
| orientation | 지원 | 화면 방향입니다. 이 프로퍼티의 값은 ScreenOrientation 열거형에 매핑되는 숫자입니다. |
| safeArea | 지원 안 함 | 화면의 세이프 영역을 결정하는 Rect입니다. 이 프로퍼티의 값을 설정하지 않으면 시뮬레이터는 화면을 전체를 세이프 영역으로 간주합니다. |
| cutouts | 지원 안 함 | 콘텐츠를 표시할 수 없는 화면 영역을 지정하는 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 | 지원 안 함 | 기기가 지원하는 그래픽스 API를 각각 설명하는 오브젝트 리스트입니다. 각 오브젝트의 스키마에 대한 자세한 내용은 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 오버레이 |
|---|---|
![]() |
![]() |
기기 오버레이 텍스처를 만든 후 기기 정의와 함께 사용하려면 먼저 기기 오버레이 텍스처 파일을 프로젝트로 가져와야 합니다.
참고: 기기 시뮬레이터가 기기 오버레이 텍스처를 로드할 때 읽기/쓰기 활성화를 시도합니다. 활성화가 불가능한 경우 기기 시뮬레이터는 텍스처를 표시하지만 텍스처를 사용하여 입력을 마스킹할 수 없습니다. 즉, 기기 오버레이가 마스킹을 적용해야 하는 화면의 노치 및 기타 영역을 클릭하면 기기 시뮬레이터가 입력을 감지합니다. 이를 방지하려면 기기 오버레이 텍스처를 임포트할 때 Texture Import Settings 창에서 Read/Write를 활성화합니다.
기기 오버레이 텍스처가 프로젝트에 있을 때 기기 정의 파일을 열고 해당 기기가 지원하는 화면을 정의하는 오브젝트에서 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 프로젝트의 Assets 또는 Packages 디렉토리를 포함하는 디렉토리를 기준으로 할 수 있습니다. 예를 들어 디바이스 정의 파일이 Assets/Devices 디렉토리에 있고 디바이스 오버레이 파일이 Assets/Devices/Overlays 디렉토리에 있는 경우 다음 파일 경로는 모두 유효합니다.