Version: 2020.3
언어: 한국어
카메라
빌드 퍼블리시

크로스 플랫폼 고려사항

대부분의 Unity API 및 프로젝트 구조는 지원되는 모든 플랫폼에서 동일하며 때때로 프로젝트를 재구성하여 다른 장치에서 실행할 수 있습니다. 하지만 하드웨어 및 배포 메서드의 기본적인 차이에 따라 프로젝트의 일부는 플랫폼 간의 변경 없이 이식할 수 없습니다. 이 페이지에는 몇 가지 일반적인 크로스 플랫폼 문제와 해결을 위한 제안이 나열되어 있습니다.

입력

플랫폼 간 다르게 동작하는 가장 좋은 예는 하드웨어에 의해 제공되는 입력 메서드입니다.

키보드 및 조이패드

Input.GetAxis 함수는 데스크톱 플랫폼에서 키보드와 조이패드 입력을 통합하는 데 편리합니다. 이 함수는 터치스크린 입력에 의존하는 모바일 플랫폼에는 적합하지 않습니다. 표준 데스크톱 키보드 입력은 입력된 텍스트를 모바일 디바이스에 이식하는 데만 적합합니다. 앞으로 다른 플랫폼으로 이식하는 것을 고려한다면 입력 코드에 추상화 레이어를 추가할 수 있습니다. 예를 들어 주행 게임을 만드는 경우 자신만의 입력 클래스를 만들고 자신의 함수에서 Unity API 호출을 래핑할 수도 있습니다.

// Returns values in the range -1.0 .. +1.0 (== left .. right).
function Steering() {
    return Input.GetAxis("Horizontal");
}


// Returns values in the range -1.0 .. +1.0 (== accel .. brake).
function Acceleration() {
    return Input.GetAxis("Vertical");
}


var currentGear: int;

// Returns an integer corresponding to the selected gear.
function Gears() {
    if (Input.GetKeyDown("p"))
        currentGear++;
    else if (Input.GetKeyDown("l"))
        currentGear--;

    return currentGear;
}

클래스에서 API 호출을 래핑하면 단일 소스 파일에 저장하여 호출을 찾고 대체하기 쉽습니다. 게임에서 입력의 논리적 의미에 따라 입력 함수를 설계해야 합니다. 이렇게 하면 나머지 게임 코드를 특정 플랫폼에서 사용되는 특정 입력 메서드와 분리하는 데 도움이 됩니다.

예를 들어 위의 Gears 함수를 수정하여 실제 입력을 모바일 디바이스 화면의 터치에서 가져올 수 있습니다. 선택한 기어를 나타내기 위해 정수를 사용하면 모든 플랫폼에서 잘 작동하지만 플랫폼별 API 호출을 나머지 코드와 혼합하면 문제가 발생할 수 있습니다. 또한 플랫폼 의존 컴파일을 사용하여 동일한 소스 파일에서 입력 함수의 다른 구현을 결합하고 수동 스왑을 피할 수도 있습니다.

터치와 클릭

Input.GetMouseButtonXXX 함수는 모바일 디바이스에서 분명한 해석이 이루어지도록 설계되어 있습니다. 화면에는 간단한 터치가 왼쪽 클릭으로 보고되며 Input.mousePosition 프로퍼티는 손가락이 화면을 터치하는 동안 터치 포지션을 반환합니다. 간단한 마우스 조작으로 하는 게임은 데스크톱과 모바일 플랫폼에서 종종 투명하게 작동할 수 있습니다.

전환은 좀 더 복잡합니다. 예를 들어 데스크톱 게임은 마우스 버튼 하나 이상을 활용할 수 있고 모바일 게임은 화면 상 동시에 일어나는 다수의 터치를 감지할 수 있습니다. 이를 관리할 수 있도록 논리 값으로 입력을 표현한 후 나머지 게임 코드로 사용할 수 있습니다.

예를 들어 모바일 디바이스에서 줌하기 위한 핀치 제스처는 데스크톱에서 +/- 키 입력으로 대체할 수 있습니다. 이 입력 함수는 줌 요소를 지정하는 플로트 값을 반환할 수 있습니다. 마찬가지로 데스크톱에서 하는 마우스 오른쪽 버튼 클릭을 대체하기 위해 모바일에서 두 손가락 탭을 사용할 수도 있습니다. 하지만 입력 기기의 프로퍼티가 게임의 필수 요소라면 다른 플랫폼에서 해당 기기를 개조할 수 없습니다. 즉 게임을 이식할 수 없거나 입력 또는 게임플레이를 광범위하게 수정해야 할 수도 있습니다.

가속 센서, 컴파스, 자이로스코프 및 GPS

이 입력은 핸드헬드 기기의 이동성에서 파생되므로 데스크톱에서 의미있는 대안은 아닐 수 있습니다. 하지만 일부 사용 사례는 간단히 표준 게임 제어를 반영하고 쉽게 이식합니다. 예를 들어 주행 게임은 모바일 디바이스의 틸트(가속 센서로 결정)로부터 스티어링 제어를 구현할 수 있습니다. 이와 같은 경우 입력 API 호출은 대개 교체하기 쉽기 때문에 가속 센서 입력을 키 입력으로 대체할 수 있습니다.

하지만 다른 입력 메서드에 맞게 조정하려면 입력을 재조정하거나 게임 난이도를 변경해야 할 수도 있습니다. 기기를 기울이면 키를 누를 때보다 속도가 느려지고 힘들어서 결과적으로 화면에 집중하기가 더 어려워집니다. 이는 모바일 디바이스에서 게임을 마스터하기가 더욱 어려워져서 게임플레이를 더 느리게 하거나 레벨당 시간을 더 허용하는 것이 적절할 수 있습니다. 게임 코드는 이러한 요소를 조정할 수 있도록 설계해야 합니다.

메모리, 스토리지 및 CPU 성능

모바일 디바이스는 스토리지, 메모리, CPU 성능이 데스크톱 컴퓨터보다 떨어지고 게임 성능이 저성능 하드웨어에 적합하지 않기 때문에 게임을 이식하기 어려울 수 있습니다. 데스크톱 하드웨어 성능을 한계까지 밀어붙이는 경우 해당 게임은 모바일 플랫폼에 이식할 후보로 적합하지 않을 수 있습니다.

스토리지 요구 사항

비디오와 오디오, 텍스처는 많은 스토리지 공간을 사용할 수 있습니다. 게임을 이식하려면 스토리지를 효율적으로 관리해야 합니다. 스토리지 공간(다운로드 시간에 해당하는 경우도 있음)은 일반적으로 데스크톱 컴퓨터에서는 문제가 되지 않지만 모바일 디바이스에서는 제한적일 수 있습니다. 모바일 앱 스토어에서는 제출된 제품의 최대 크기에 제한을 두기도 합니다. 게임 개발 과정에서 이러한 문제를 해결하기 위한 계획이 필요할 수 있습니다.

예를 들어 공간을 절약하기 위해 모바일에 대한 에셋의 축소 버전을 제공해야 할 수 있습니다. 또는 애플리케이션의 초기 다운로드 일부가 아닌 대규모 에셋을 다운로드할 수 있도록 게임을 설계해야 할 수도 있습니다.

자동 메모리 관리

Unity에서는 "데드" 오브젝트에서 사용되지 않은 메모리 복구를 자동으로 처리하며 데스크톱 컴퓨터에는 알림 없이 처리되기도 합니다. 하지만 모바일 디바이스의 메모리와 CPU 성능이 낮으면 가비지 컬렉션이 더 자주 발생할 수 있으며 성능에 영향을 미치며 게임 플레이에서 원치 않는 일시 정지가 발생합니다. 게임이 사용 가능한 메모리 내에서 실행되더라도 가비지 컬렉션 일시 정지를 피하기 위해 코드를 최적화해야 할 수도 있습니다.

자세한 내용은 메모리 관리 페이지를 참조하십시오.

CPU 능력

데스크톱 컴퓨터에서 잘 작동하는 게임도 모바일 CPU에서 게임 복잡도로 인해 처리가 힘들기 때문에 모바일 디바이스에서 프레임 속도가 떨어지는 문제가 발생할 수 있습니다. 프로젝트를 모바일 플랫폼에 이식할 때 코드 효율성에 유의해야 합니다.

카메라
빌드 퍼블리시