목차

,

스크립트 성능 최적화

이 페이지는 iOS에서 어떻게 스크립트 성능을 향상시킬수 있는지에 대한 일반 힌트를 제공합니다.

FixedDeltaTime

감소된 고정 델타 타임

15-25fps의 고정 델타 타임을 사용하세요. 사용자는 Edit→Project Settings→Time에서 이것을 바꿀수 있습니다. 이것은 FixedUpdate가 불리고 물리 엔진이 충돌감지(collision detection)와 rigidbody 엡데이트하는 빈도수를 줄여줍니다. 주요 캐릭터에 rigidbody를 사용한다면 Rigidbody컴포넌트에서 낮은 고정 델타 타임 스텝을 부드럽게하기 위해 interpolation을 활성화 할 수 있습니다.

''GetComponent''콜수 줄이기

GetComponentBuiltIn 컴포넌트를 액세서를 사용하는 것은 주목할만한 오버헤드를 생기가 할 수 있습니다. 이것은 컴포넌트의 직접적인 참조를 캐슁하여 줄일수 있습니다.

예를 들어:

function Update () {
    transform.Translate(0, 1, 0);
}

대신 아래와 같이 최적화 할수 있습니다:

myTransform : Transform;
function Awake () {
   myTransform = transform;
}
function Update () {
    myTransform.Translate(0, 1, 0);
}

메모리 할당을 피하세요

GUI 를 줄이세요

function Awake () {
    useGUILayout = false;
}

iOS 스크립트 콜 최적화를 사용하세요

UnityEngine 내임스페이스에 있는 대부분의 함수는 C/C++로 구현되어 있습니다. 그런 함수를 스크립트에서 부르는 것은 성능에 추가적인 오버헤드가 있습니다. 프레임당 추가의 몇 밀리세컨드를 얻기 위해서는 Edit→Project Settings→Player 에 있는 iOS스크립트 콜 최적화를 사용하세요:

Garbage Collection 최적화

이 방법은 아주 긴 액션 게임플레이가 있고 부드러움 framerate가 필요한 게임에서 잘 작동합니다.
짧은 시간동안 작은 블락을 할당하는 유니티 iOS게임에서 힙은 보통 ~5ms(iPhone 3G에서)걸립니다. 1MB힙에서는 가비지 컬력션은 ~7ms정도 더 걸립니다.
가끔은 매 N번 프레임마다 강제 가비지 콜렉션을 하는것도 유용합니다:

if (Time.frameCount % 30 == 0)
{
   System.GC.Collect();
}

그러나 유의해서 사용하세요. 내부 프로파일러 통계를 보고 그것을 바탕으로 결정을 내리세요.

이 방법은 게임이 요구하는 부드러운 프레임 속도가 짧은 것과 중간 사이의 길이일 때 사용을 합니다. 아이디어는 게임이 실행될때는 가비지 컬렉션을 피하고 게임이 중단 되었을 때하는 것입니다. 게임 시작에 힙에 어느 정도의 공간을 미리 할당하는 것도 좋은 생각인데 그 공간은 게임 플레이 세션이 잘 돌아갈수 있을 만큼 크고 OS의 낮은 메모리 시스템으로 인해 프로그램이 멈추지 않을 만큼의 작은 공간을 말합니다. 모노는 필요할 때문 힙을 늘리기 때문에 가끔 시작시에 강제적으로 확장하는 것도 좋은 생각입니다:

function Start() {
	var tmp = new System.Object[1024];
	// 할당은 작은 블락에해서 큰 블락은 위하 특별한 처리 방법을 피하도록 합니다
        for (var i : int = 0; i < 1024; i++)
		tmp[i] = new byte[1024];
	// 참조를 풀어 줍니다
        tmp = null;
}

나중에 게임 플레이가 중단 되었을때 강제적으로 가비지 콜렉션을 할 수 있습니다:

System.GC.Collect();

주의해서 사용하셔야 합니다. 내주 프로파일러 통계에 주목하시고 실제 숫자를 바탕으로 결정을 내리세요.