Unity의 SystemInfo 클래스에 대한 심층 이해: 자세한 기술 가이드(1)

이전 기사 Unity Development - Use of Practical Features at the Mobile Terminal(Android/IOS) 에서 소개한 실용적인 기능 사용에 이어 Unity의 SystemInfo 클래스에 대해 계속해서 심도 있게 논의하겠습니다.

Unity 게임을 개발할 때 때때로 하드웨어 정보 또는 일부 시스템 수준 정보를 가져와야 할 수 있습니다.예를 들어 특정 기능을 지원하는 장치에서 게임을 실행할 수 있는지 여부를 알고 싶을 수 있습니다. 또는 하드웨어 특성이 다른 장치에 대해 게임을 최적화하기 위해 몇 가지 기능 검색을 수행해야 할 수도 있습니다. Unity는 이 정보를 얻는 데 도움이 되는 SystemInfo라는 매우 유용한 클래스를 제공합니다.

SystemInfo 개요

Unity의 SystemInfo 클래스는 현재 하드웨어 및 운영 체제에 대한 정보를 얻을 수 있는 방법을 제공합니다. 여기에는 장치 유형, 운영 체제, 프로세서, 메모리, 그래픽 카드, 지원되는 Unity 기능 등이 포함됩니다. SystemInfo 클래스를 사용하는 것은 매우 간단합니다. 모든 속성과 메서드는 정적이므로 不需要创建SystemInfo的对象.

注意: SystemInfo 클래스는 많은 하드웨어 및 시스템 정보를 제공할 수 있지만 해당 정보는 可能会受到设备和操作系统的限制. 일부 속성은 일부 플랫폼에서 사용하지 못할 수 있습니다. 따라서 SystemInfo를 사용할 때,취득한 데이터가 유효한지 반드시 확인하여 프로그램 오류 방지

SystemInfo의 몇 가지 중요한 속성과 메서드를 살펴보고 예제와 사례를 통해 실제로 사용하는 방법에 대해 논의해 보겠습니다.

  1. 장치 및 시스템 정보:
    deviceModel: 장치의 모델 이름입니다.
    deviceName: 장치의 사용자 정의 이름입니다.
    deviceType: 데스크탑, 팜톱 또는 콘솔과 같은 장치 유형입니다.
    deviceUniqueIdentifier: 고유한 장치 식별자입니다.
    operatingSystem: 장치가 실행 중인 운영 체제입니다.
    operatingSystemFamily: 장치가 실행 중인 운영 체제 제품군입니다.
    processorCount: 프로세서 코어의 수입니다.
    processorFrequency: 프로세서 주파수(MHz)입니다.
    processorType: 프로세서 유형 및 공급업체.
    supportedRenderTargetCount: 지원되는 렌더링 대상의 수입니다.
    systemMemorySize: 시스템 메모리 크기(MB)입니다.

예를 들어 SystemInfo 클래스를 사용하여 프로세서 유형과 메모리 크기를 가져와서 출력할 수 있습니다.

string processorType = SystemInfo.processorType;
int memorySize = SystemInfo.systemMemorySize;
Debug.Log("处理器类型: " + processorType);
Debug.Log("内存大小: " + memorySize + " MB");

  1. 그래픽 카드 및 디스플레이 관련:
    graphicsDeviceID: 그래픽 카드의 장치 ID입니다.
    graphicsDeviceName: 그래픽 카드의 이름입니다.
    graphicsDeviceType: 그래픽 카드의 유형입니다.
    graphicsDeviceVendor: 그래픽 카드의 공급업체입니다.
    graphicsDeviceVendorID: 그래픽 카드 공급업체의 ID입니다.
    graphicsDeviceVersion: 그래픽 카드의 버전입니다.
    graphicsMemorySize: 그래픽 카드의 메모리 크기(MB)입니다.
    graphicsShaderLevel: 그래픽 카드에서 지원하는 셰이더 모델의 수준입니다.
    graphicsMultiThreaded: 그래픽 카드가 다중 스레드 렌더링을 지원하는지 여부입니다.
    graphicsUVStartsAtTop: UV 좌표의 원점이 텍스처의 맨 위에 있는지 여부입니다.
    supportShadows: 장치가 그림자를 지원하는지 여부.
    supportsMotionVectors: 장치가 모션 벡터를 지원하는지 여부.
    supports3DTextures: 장치가 3D 텍스처를 지원하는지 여부.
    supports2DArrayTextures: 장치가 2D 배열 텍스처를 지원하는지 여부.
    supports3DRenderTextures: 장치가 3D 렌더링 텍스처를 지원하는지 여부.

예를 들어 기기가 그림자와 3D 텍스처를 지원하는지 확인할 수 있습니다.

bool supportsShadows = SystemInfo.supportsShadows;
bool supports3DTextures = SystemInfo.supports3DTextures;
Debug.Log("支持阴影: " + supportsShadows);
Debug.Log("支持3D纹理: " + supports3DTextures);

  1. Unity의 일부 기능은 다음과 관련되어 있습니다.
    supportsImageEffects: 장치가 이미지 효과를 지원하는지 여부.
    supportsInstancing: 장치가 인스턴싱을 지원하는지 여부.
    supportsComputeShaders: 기기가 컴퓨트 셰이더를 지원하는지 여부입니다.
    supportsGeometryShaders: 장치가 지오메트리 셰이더를 지원하는지 여부입니다.

예를 들어 기기가 컴퓨트 셰이더를 지원하는지 여부를 확인하고 그에 따라 특정 기능을 활성화할지 여부를 결정할 수 있습니다.

bool supportsComputeShaders = SystemInfo.supportsComputeShaders;
if(supportsComputeShaders) {
    
    
    // 启用计算着色器相关的特性
} else {
    
    
    // 禁用计算着色器相关的特性,或采用备用方案
}

  1. 사용자 데이터 경로 관련:
    persistDataPath: 게임 데이터를 저장하는 데 사용되는 사용자의 영구 데이터 경로입니다.
    temporaryCachePath: 임시 캐시 데이터를 저장하는 데 사용되는 경로입니다.

예를 들어, persistDataPath 속성을 사용하여 사용자의 영구 데이터 경로를 가져올 수 있습니다.

string dataPath = SystemInfo.persistentDataPath;
// 使用dataPath保存或读取游戏数据

  1. 플랫폼별:
    batteryLevel: 장치의 배터리 수준으로, 모바일 장치에만 적용됩니다.
    batteryStatus: 장치의 배터리 상태이며 모바일 장치에만 적용됩니다.
    supportsVibration: 장치가 진동을 지원하는지 여부이며 모바일 장치에만 적용됩니다.

예를 들어 기기의 배터리 상태를 확인할 수 있으며,게임 성능 조정전원을 절약하려면:

BatteryStatus batteryStatus = SystemInfo.batteryStatus;
if(batteryStatus == BatteryStatus.Charging || SystemInfo.batteryLevel > 0.5f) {
    
    
    // 电池状态良好,可以使用高性能模式
} else {
    
    
    // 电池状态不佳,应使用低性能模式以节省电量
}

  1. 기타 관련:
    maxTextureSize: 장치에서 지원하는 최대 텍스처 크기(픽셀 단위)입니다. 이 속성을 사용하여 게임에서 큰 텍스처를 사용할 수 있는지 여부를 결정할 수 있습니다.
    npotSupport: NPOT(non-power-of-two) 텍스처에 대한 장치의 지원을 나타냅니다. NPOT 텍스처는 너비와 높이가 2의 거듭제곱이 아닌 텍스처입니다. 이 속성을 사용하여 NPOT 텍스처를 사용할 수 있는지 여부를 결정할 수 있습니다.
    supportHDRDisplay: 기기가 HDR(High Dynamic Range) 디스플레이를 지원하는지 여부를 나타냅니다. 장치가 HDR을 지원하는 경우 게임에서 더 넓은 범위의 색상과 대비를 사용할 수 있습니다.
    supportsAsyncCompute: 장치가 비동기 컴퓨팅을 지원하는지 여부를 나타냅니다. 장치가 비동기 컴퓨팅을 지원하는 경우 GPU에서 그래픽 렌더링 및 컴퓨팅 작업을 동시에 수행하여 성능을 향상시킬 수 있습니다.
    supportsGyroscope: 장치가 자이로스코프를 지원하는지 여부를 나타냅니다. 장치가 자이로스코프를 지원하는 경우 게임은 장치의 방향 및 회전에 대한 정보를 얻을 수 있습니다.
    supportsLocationService: 장치가 위치 서비스를 지원하는지 여부를 나타냅니다. 장치가 위치 서비스를 지원하는 경우 게임은 장치의 지리적 위치에 대한 정보를 얻을 수 있습니다.
    supportsAccelerometer: 장치가 가속도계를 지원하는지 여부를 나타냅니다. 장치가 가속도계를 지원하는 경우 게임에서 장치의 움직임 및 기울기에 대한 정보를 얻을 수 있습니다.

다음은 이러한 속성을 사용하는 몇 가지 예입니다.

if(SystemInfo.supportsHDRDisplay) {
    
    
    // 开启HDR相关效果
} else {
    
    
    // 关闭HDR或使用备用效果
}

if(SystemInfo.supportsGyroscope) {
    
    
    // 使用陀螺仪获取设备方向
} else {
    
    
    // 使用其他方法获取设备方向
}

SystemInfo는 Unity의 매우 강력한 클래스로, 게임이 어떤 종류의 장치에서 실행되고 있는지 이해하는 데 도움이 되므로 게임을 더 잘 최적화하고 디버깅할 수 있습니다. 해당 정보를 사용하여 게임을 다양한 장치 및 시스템 특성에 맞게 조정하여 다양한 장치에서 최상의 플레이어 경험을 제공할 수 있습니다. 따라서 아직 SystemInfo를 사용하지 않았다면 지금 탐색을 시작하십시오!

위의 내용은 Unity의 SystemInfo 클래스에 대한 심층 분석입니다. 이점을 활용하시기 바랍니다. 질문이 있거나 추가 정보가 필요한 경우 논의할 메시지를 남겨주세요.

추천

출처blog.csdn.net/qq_33795300/article/details/131021899