기기 추가
Explains how to define a new device to simulate and use it in the Device Simulator.
읽는 시간 8분최근 업데이트: 한 달 전
기기 시뮬레이터에 새 기기를 추가하려면 기기 정의와 기기 오버레이를 생성합니다.
기기 정의는 Unity 프로젝트에서 확장자가 인 텍스트 파일입니다. 여기에는 기기의 프로퍼티를 설명하는 JSON 파일이 포함됩니다.
.device기기 오버레이는 기기 화면의 테두리와 노치, 펀치아웃 및 사각형 화면에 추가되는 기타 요소를 포함하는 이미지입니다. 이를 필요에 따라 기기 정의와 함께 사용하여 하드웨어 요소가 기기 화면을 가로막는 방식을 시각화하고 이를 통해 터치 입력이 작동하지 않는 지점을 결정할 수 있습니다.
기기 정의 생성
기기 정의는 기기를 나타내는 JSON 파일입니다. 여기에는 필수 프로퍼티와 일부 선택적 프로퍼티가 모두 들어 있습니다. 기기 정의 파일에 오류가 있으면 해당 파일을 선택할 때 인스펙터에 오류가 표시됩니다.
스키마
프로퍼티 | 필수 | 설명 |
|---|---|---|
| friendlyName | 지원 | 기기의 UI에 표시할 이름입니다. |
| version | 지원 | 기기 정의 파일의 버전을 나타냅니다. 현재 버전은 |
| 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를 참조하십시오. |
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 모델의 기기 오버레이를 보여줍니다.
참고: 다음 예시에서는 탭할 수 있는 화면 영역에 Unity의 기본 스카이박스를 표시하여 기기 오버레이를 사용할 때 표시되는 사항을 모방합니다. 실제 기기 오버레이에서 이러한 픽셀은 투명해야 합니다.
Apple iPhone 8 오버레이 | Apple iPhone XS 오버레이 |
|---|---|
![]() | ![]() |
기기 오버레이 사용
기기 오버레이 텍스처를 만든 후 기기 정의와 함께 사용하려면 먼저 기기 오버레이 텍스처 파일을 프로젝트로 가져와야 합니다.
참고: 기기 시뮬레이터가 기기 오버레이 텍스처를 로드할 때 읽기/쓰기 활성화를 시도합니다. 활성화가 불가능한 경우 기기 시뮬레이터는 텍스처를 표시하지만 텍스처를 사용하여 입력을 마스킹할 수 없습니다. 즉, 기기 오버레이가 마스킹을 적용해야 하는 화면의 노치 및 기타 영역을 클릭하면 기기 시뮬레이터가 입력을 감지합니다. 이를 방지하려면 기기 오버레이 텍스처를 임포트할 때 Texture Import Settings 창에서 Read/Write를 활성화합니다.
기기 오버레이 텍스처가 프로젝트에 있을 때 기기 정의 파일을 열고 해당 기기가 지원하는 화면을 정의하는 오브젝트에서 presentation 프로퍼티를 추가합니다. 여기에서 이미지 파일의 경로()와 테두리 크기()를 설정합니다. 이를 수행하는 방법의 예는 다음 기기 정의 파일을 참조하십시오.
overlayPathborderSize{ "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 디렉토리에 있는 경우 다음 파일 경로는 모두 유효합니다.
- 기기 정의 파일 기준: Overlays/MinimalDeviceOverlay.png
- Assets 디렉토리가 포함된 디렉토리 기준: Assets/Devices/Overlays/MinimalDeviceOverlay.png

