SideProjects/DuolingoClone

[듀오링고 클론 코딩 with Unity] FPS (Frame Per Second)

VirtualDever 2022. 3. 2. 19:51

유니티는 게임 엔진으로 시작했습니다.

게임은 1초당 몇개의 프레임을 그릴 수 있느냐가 매우 중요합니다.

FPS 많이 들어보셨을 것입니다.

1인칭 슈팅 게임은 아니고, Frame Per Second의 약자입니다.

 

그래서 보통은 게임에서 60 FPS를 유지해서 그보다 떨어지지 않도록 개발해야 합니다.

유저 입장에서 게임이 끊겨 보일 수 있기 때문입니다.

초당 60 프레임을 유지하기 위해서는 PC의 경우, CPU, GPU(그래픽카드)의 성능이 최대한 발휘되어야 합니다.

 

게임에서는 보통 아래와 같이 설정하면 좋습니다.

모바일의 경우, 발열과 배터리 소모 이슈가 있을 수 있기  때문에 수치는 달라질 수도 있습니다.

QualitySettings.vSyncCount = 0;
Application.targetFrameRate = 60;

그럼 실험을 한 가지 해보겠습니다.

먼저, 스크립트를 하나 생성합니다.

저는 스크립트 이름을 Test 로 정했습니다.

그러면 유니티 에디터에서 Test 라는 클래스를 만들어 줍니다.

템플릿 코드라고도 하는데요.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Application.targetFrameRate = 60;
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("Update() called!");
    }
}

Start() 함수에 60 프레임으로 설정하고,

Update() 함수에서는 디버깅을 위한 로그를 출력하도록 하겠습니다.

예상되는 결과는 1초당 "Update() called!" 라는 로그가 60번 찍힐 것입니다.

작성이 끝나면 Test 스크립트를 Project 창에서 끌어서 Canvas에 추가합니다.

 

스크립트를 추가하는 방법은 여러가지가 있는데 여기서는 가장 간단한 방법을 소개드립니다.

Test 스크립트를 드래그 해서 Hierarchy 상에 있는 Canvas에 놓습니다.

그럼 아래 화면과 같이 Test 컴포넌트가 제일 아래에 추가된 것을 확인할 수 있습니다.

 

그럼 유니티 에디터에서 플레이 버튼을 눌러 실행해 보겠습니다.

Console 창을 보면 어마무시하게 많은 로그가 찍히는 것을 확인할 수 있습니다.

그중 유념해서 보아야 할 것은 로그 좌측에 [19:43:07] 이라는 텍스트입니다.

현재 시각을 의미합니다.

시 : 분 : 초가 되겠지요.

Console 창을 아래로 스크롤해 보면, 60번 Update()가 호출될 수 있다는 것을 알 수 있었습니다.

그럼 이제 targetFrameRate 를 60이 아니라, 1로 설정하고 다시 플레이를 해봅니다.

Application.targetFrameRate = 1;

이제 아래와 같이 1초당 한 번 Update() 함수가 호출되는 것을 알 수 있습니다.

54, 55, 56, .... 이렇게 찍히고 있습니다.

그렇다면 게임이 아닌, 일반 어플리케이션은 초당 몇 프레임 (FPS)이면 좋을까요.

앱의 특성에 따라 다르겠지만, 부드러운 애니메이션이 필요 없다면 targetFrameRate를 1 로 정하는 것도 좋은 선택일 것입니다.