본문 바로가기
개발/Unity

유니티 - OnGUI로 실시간 초당 프레임 수 확인하기 (FPS Status based on OnGUI)

by 피로물든딸기 2022. 6. 17.
반응형

Unity 전체 링크

 

참고

- OnGUI, ProfilerRecorder로 런타임 드로우 콜 확인하기

 

초당 프레임 수 FPS(Frame Per Second)는 성능을 확인할 수 있는 지표 중 하나다.

영화에서는 프레임 수(필름)가 많을수록 더 부드럽게 화면이 전환되어 각 사진이 움직이는 것처럼 보이게 된다.

반대로 프레임 수가 적으면 사진과 사진이 끊겨서 영상이 부드럽게 보이지 않는다.

 

마찬가지로 유니티의 프레임 수도 높을수록 부드러운 화면을 보고 있다고 할 수 있다.

 

참고로 FPS는 Game 뷰에서 Stats을 클릭하면 볼 수 있다.

 

이 FPS를 유니티 게임 뷰에서도 볼 수 있게 해보자.


프레임과 프레임의 간격Time.deltaTime이다.

즉, 다음 프레임은 Time.deltaTime 초 후 호출된다.

따라서 FPS1 / Time.deltaTime이 된다.

 

화면에 FPS를 보여주기 위해서는 OnGUI에서 렌더링을 처리하고 호출하면 된다.

    void OnGUI()
    {
    	float fps = 1.0f / Time.deltaTime;
        float ms = Time.deltaTime * 1000.0f;      
    }

Time.deltaTime에 1000을 곱한 값은 ms 밀리세컨드 후 다음 프레임이 호출된다는 것을 의미한다.

 

이제 fps와 ms를 Stats의 FPS와 ms와 같이 소수점 한자리(=N1)만 나타내도록 문자열에 반영한다.

string text = string.Format("{0:N1} FPS ({1:N1}ms)", fps, ms);

 

GUI.Label 함수에서 (position, text, style)을 설정해서 넣어주면

화면의 설정한 위치스타일을 적용한 text를 보여준다.

여기서는 글자의 크기, 글자의 색깔, 그리고 화면의 위치를 조정할 수 있도록 하였다.

fontSize는 Range를 추가하여 슬라이드로 크기를 변경한다.

public class FpsStatus : MonoBehaviour
{
    [Range(10, 150)]
    public int fontSize = 30;
    public Color color = new Color(.0f, .0f, .0f, 1.0f);
    public float width, height;

    void OnGUI()
    {
        Rect position = new Rect(width, height, Screen.width, Screen.height);

        float fps = 1.0f / Time.deltaTime;
        float ms = Time.deltaTime * 1000.0f;
        string text = string.Format("{0:N1} FPS ({1:N1}ms)", fps, ms);

        GUIStyle style = new GUIStyle();

        style.fontSize = fontSize;
        style.normal.textColor = color;

        GUI.Label(position, text, style);
    }
}

 

위의 코드를 GameManager와 같은 빈 오브젝트에 추가하면 된다.

 

글자 크기와 색깔, 그리고 위치를 변경할 수 있는 것을 확인해보자.

그리고 Cube를 복사하면 급격히 FPS가 감소하는 것을 알 수 있다.

(오브젝트의 생성은 프레임을 떨어트리는 무거운 연산이라는 뜻이다.)

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글