참고
- OnGUI, ProfilerRecorder로 런타임 드로우 콜 확인하기
초당 프레임 수 FPS(Frame Per Second)는 성능을 확인할 수 있는 지표 중 하나다.
영화에서는 프레임 수(필름)가 많을수록 더 부드럽게 화면이 전환되어 각 사진이 움직이는 것처럼 보이게 된다.
반대로 프레임 수가 적으면 사진과 사진이 끊겨서 영상이 부드럽게 보이지 않는다.
마찬가지로 유니티의 프레임 수도 높을수록 부드러운 화면을 보고 있다고 할 수 있다.
참고로 FPS는 Game 뷰에서 Stats을 클릭하면 볼 수 있다.
이 FPS를 유니티 게임 뷰에서도 볼 수 있게 해보자.
프레임과 프레임의 간격은 Time.deltaTime이다.
즉, 다음 프레임은 Time.deltaTime 초 후 호출된다.
따라서 FPS는 1 / 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:
Unity Pro:
Unity 프리미엄 학습:
'개발 > Unity' 카테고리의 다른 글
유니티 - 2차원 배열 디버깅 : 커스텀 에디터로 인스펙터 수정하기 (Custom Editors) (0) | 2022.06.19 |
---|---|
유니티 - 2차원 배열 디버깅 : 인스펙터에 보여주기 (2D Array in the Inspector) (0) | 2022.06.18 |
유니티 쉐이더 - 카메라가 바라보는 방향으로 밝아지는 큐브 (0) | 2022.06.14 |
유니티 - BoundBox로 블럭이 움직일 위치 미리 예상하기 (Runtime Collider, 런타임 콜라이더) (0) | 2022.06.12 |
유니티 - 드래그로 블럭 옆으로 한 칸 움직이기 (Drag GameObject Snapped to a Grid) (0) | 2022.06.12 |
댓글