불필요한 플레이어 설정 또는 품질 설정 비활성화
플레이어 설정에서 지원되지 않는 플랫폼의 Auto Graphics API를 비활성화하면 셰이더 배리언트가 과도하게 생성되지 않도록 방지할 수 있습니다. 애플리케이션이 오래된 CPU를 지원하지 않는다면 해당 CPU에 대해 Target Architectures를 비활성화합니다.
품질 설정에서 불필요한 품질 수준을 비활성화합니다.
불필요한 물리 비활성화
게임에서 물리를 사용하지 않는다면 Auto Simulation과 Auto Sync Transforms를 선택 해제합니다. 해당 기능을 선택하면 별다른 이득 없이 애플리케이션의 속도가 저하될 수 있습니다.
올바른 프레임 속도 선택
모바일 프로젝트에서는 프레임 속도와 배터리 수명, 서멀 스로틀링이 균형을 이루어야 합니다. 기기의 한계인 60fps까지 밀어 붙이기 보다는 30fps 정도에서 타협해 실행하는 것이 좋습니다. Unity는 모바일의 경우 30fps를 기본으로 설정합니다.
또한 Application.targetFrameRate를 활용해 런타임 중에 프레임 속도를 동적으로 조정할 수도 있습니다. 예를 들어 속도가 느리거나 비교적 정적인 씬의 경우 30fps 아래로 낮추고 게임플레이 중에는 더 높은 fps 설정을 유지할 수 있습니다.
대규모 계층 구조 사용 지양
Split your hierarchies. 게임 오브젝트가 계층 구조 내에 중첩될 필요가 없다면 부모 자식 관계를 간소화하세요. 계층 구조가 단순하면 씬에서 트랜스폼을 새로고침할 때 멀티스레딩의 이점을 누릴 수 있습니다. 계층 구조가 복잡하면 불필요한 트랜스폼 연산과 높은 가비지 컬렉션 비용이 발생합니다.
트랜스폼에 관한 베스트 프랙티스는 계층 구조 최적화와 이 Unite 세션을 참고하세요.
트랜스폼 한 번에 이동
아울러 트랜스폼 이동 시, Transform.SetPositionAndRotation을 사용하여 위치와 회전을 한 번에 업데이트하세요. 이렇게 하면 트랜스폼을 두 번 수정함으로써 발생하는 오버헤드를 방지할 수 있습니다.
런타임에서 게임 오브젝트를 인스턴트화해야 한다면 다음과 같이 단순한 최적화로 인스턴스화 중에 부모 자식 관계를 설정하고 다시 포지셔닝할 수 있습니다.
GameObject.Instantiate(prefab, parent);
GameObject.Instantiate(prefab, parent, position, rotation);
Object.Instantiate에 대한 자세한 정보는 Scripting API를 참고하세요.
Vsync가 활성화되어 있다고 가정
모바일 플랫폼은 절반 프레임을 렌더링하지 않습니다. 에디터에서 Vsync를 비활성화하더라도(Project Settings > Quality) 하드웨어 수준에서는 Vsync가 활성화되어 있습니다. GPU가 충분히 빠르게 새로고침할 수 없는 경우, 현재 프레임이 유지되면서 사실상 fps가 줄어듭니다.