MonoBehaviour 의 주요 클래스인 Update 사용 시 주의사항은?
1. 주기적인 호출
Update 메서드는 매 프레임마다 호출된다. 따라서 무거운 계산이나 자원 소모적인 작업을 수행하면 성능에 부정적인 영향을 미칠 수 있다. 필요한 경우에만 호출될 수 있도록 최적화가 필수적이다.
* Update 사용을 줄이는 방법
FixedUpdate는 고정된 시간 간격으로 호출되며, 물리 시뮬레이션에 사용된다. 물리 연산과 관련된 작업은 FixedUpdate에서 수행하는 것이 좋다.
2. 프레임 시간에 따른 차이점
Update 의 가장 큰 특징은 호출 시간 간격이 프레임에 따라 변한다는 것이다. 프레임마다 호출되는 특성 상 서로 다른 컴퓨터에서 출력에 차이를 보일 수 있다. 특히 인게임에서 시간과 관련된 부분을 다루는 경우 유저 간 경험의 차이가 발생할 수있다. 따라서 시간에 영향을 주는 작업 수행 시 Time.deltaTime을 사용하여 프레임 간 경과 시간을 고려해야 한다. 이를 통해 게임이 어떤 환경, 성능, 속도로 실행되어도 항상 일관된 결과를 보장할 수 있게 된다.
3. 자원 해제
게임 오브젝트나 컴포넌트를 사용한 후에는 적절한 시점에 메모리 누수를 방지하기 위해 해당 자원을 해제해야 한다. OnDestroy 메서드를 활용하여 자원을 정리할 수 있다.
4. Null 체크
외부 리소스나 다른 오브젝트와의 상호 작용 시 null 체크를 항상 수행해야 한다. 예상치 못한 null 참조로 인한 오류를 방지할 수 있다.
Time.deltaTime이란 무엇인가?
Time.DeltaTime 이란 Unity 게임 엔진에서 프레임 간 경과 시간을 나타내는 변수이다.
컴퓨터 성능이 느릴수록 그 값이 커진다.
C#에서 Update 함수는 매 프레임마다 호출해 코드를 실행한다.
컴퓨터 성능에 따라 한 프레임에 나오는 결과 값이 다를 수 있는데, Time.DeltaTime을 사용함으로써 서로 다른 유저가 같은 결과값을 낼 수 있도록 보정할 수 있다. 유저의 컴퓨터 fps 환경에 따라 달라지는 시간 간격을 자동으로 계산해줌으로써 서로 다른 컴퓨터 환경으로 인해 발생하는 차이를 방지한다.
Time.deltaTime은 주로 게임에서 시간과 관련된 작업을 수행할 때 사용한다.
Unity는 프레임마다 게임 루프를 실행하며, Time.deltaTime은 이 프레임 간의 경과 시간을 나타낸다. 이 값은 부동 소수점 숫자로 표현되며, 초 단위로 경과 시간을 나타낸다.
예를 들어, 게임에서 물체를 이동시키거나 애니메이션을 제어할 때, Time.deltaTime을 사용하여 각 프레임에서 이동이나 애니메이션을 조절함으로써 게임이 서로 다른 프레임 속도에서 실행될 때도 일관된 동작을 유지할 수 있다.
이는 빠르거나 느린 시스템에서도 공평한 게임 환경을 조성함으로써 여러 유저에게 일관된 경험을 제공하는 데 도움을 준다.
Time.deltaTime을 이용해 간단한 타이머 만들기
{
int curTime;
IEnumerator Timer()
{
yield return new WaitForSeconds(1.0f); // 화면 전환을 위해 잠깐 기다림
curTime = 60;
while (curTime > 0)
{
curTime -= Time.deltaTime;
minute = (int)curTime / 60;
second = (int)curTime % 60;
text.text = second.ToString("0");
yield return null;
if (curTime <= 0)
{
yield break;
}
}
}
}
curTime이라는 int형 변수에 시간을 담고,
매초마다 Time.deltaTime을 이용해 보장된 1초를 감소시킴으로써 타이머를 만들 수 있다.
'게임 개발 일지 > 내일배움캠프 TIL' 카테고리의 다른 글
[Unity] Scene이 여러 개인 게임의 SoundManager (0) | 2024.02.22 |
---|---|
[Unity] 컬링 (Culling) (1) | 2024.02.21 |
[Unity] 렌더링 파이프라인 (0) | 2024.02.20 |
[Unity] MonoBehaviour 메서드 (0) | 2024.02.16 |
[Unity] Unity 생명주기 (0) | 2024.02.15 |
댓글