반응형
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
언리얼 엔진에서 타이머 란 무엇이며, 어떻게 활용할 수 있는지 간략히 알아보았습니다.
질문 >
언리얼 엔진에서 타이머 란 무엇이며, 어떻게 활용할 수 있나요?
답변 >
타이머(Timer)는 언리얼 엔진에서 특정 작업을 지정된 시간 간격으로 실행하거나, 일정 시간이 지난 후 실행되도록 예약할 수 있는 기능입니다. 주로 게임플레이 이벤트, 애니메이션, 반복적인 작업 등에 사용됩니다. 타이머는 FTimerHandle과 GetWorldTimerManager를 통해 제어됩니다.
1. 타이머의 주요 특징
- 지연 실행(Delay): 일정 시간이 지난 후 특정 함수를 호출.
- 반복 실행: 지정된 간격으로 반복적으로 함수를 호출.
- 정지 및 재시작: 실행 중인 타이머를 멈추거나 다시 시작 가능.
- 상태 확인: 특정 타이머가 실행 중인지 확인.
2. 타이머의 구성 요소
- FTimerHandle: 타이머를 관리하는 핸들. 개별 타이머를 제어하기 위해 필요.
- GetWorldTimerManager: 타이머를 등록, 실행, 취소하는 데 사용되는 매니저.
- 함수 바인딩: 실행할 함수를 지정하여 타이머가 호출할 작업을 정의.
3. 타이머 사용법
3.1 타이머 설정 (C++)
1) 타이머 등록 및 실행
FTimerHandle TimerHandle; // 타이머 핸들 선언
void AMyActor::StartTimer()
{
// 3초 후에 MyFunction 호출, 반복하지 않음(false)
GetWorldTimerManager().SetTimer(TimerHandle, this, &AMyActor::MyFunction, 3.0f, false);
}
2) 반복 실행 설정
void AMyActor::StartRepeatingTimer()
{
// 2초마다 MyRepeatingFunction 호출, 반복(true)
GetWorldTimerManager().SetTimer(TimerHandle, this, &AMyActor::MyRepeatingFunction, 2.0f, true);
}
3) 타이머 취소
void AMyActor::StopTimer()
{
// 특정 타이머 취소
GetWorldTimerManager().ClearTimer(TimerHandle);
}
4) 타이머 상태 확인
bool AMyActor::IsTimerActive()
{
return GetWorldTimerManager().IsTimerActive(TimerHandle); // 실행 중인지 확인
}
3.2 블루프린트에서 타이머 설정
1) 타이머 설정
- Set Timer by Function Name 노드를 사용하여 함수와 시간을 설정.
- Time 필드에 실행 대기 시간을 입력.
- Looping 체크박스를 활성화하면 반복 실행.
2) 타이머 정지
- Clear Timer by Handle 노드를 사용하여 특정 타이머를 정지.
3) 상태 확인
- Is Timer Active by Handle 노드를 통해 타이머가 실행 중인지 확인.
4. 응용 사례
4.1 지연 효과
- 일정 시간이 지난 후 특정 작업 실행.
- 예: 폭탄이 폭발하기 전 경고음 발생.
C++ 예제:
void AMyActor::ExplodeAfterDelay()
{
GetWorldTimerManager().SetTimer(TimerHandle, this, &AMyActor::Explode, 5.0f, false);
}
void AMyActor::Explode()
{
// 폭발 처리 로직
}
4.2 반복 작업
- 일정 간격으로 반복 작업 수행.
- 예: 몬스터의 체력 재생, UI 업데이트.
C++ 예제:
void AMyActor::StartHealthRegeneration()
{
GetWorldTimerManager().SetTimer(TimerHandle, this, &AMyActor::RegenerateHealth, 1.0f, true);
}
void AMyActor::RegenerateHealth()
{
Health += 10;
if (Health >= MaxHealth)
{
Health = MaxHealth;
GetWorldTimerManager().ClearTimer(TimerHandle); // 체력 회복 완료 시 타이머 정지
}
}
4.3 카운트다운
- 일정 시간 동안 카운트다운을 표시.
- 예: 게임 시작 전 대기 시간.
블루프린트
- Set Timer by Function Name 노드로 카운트다운 함수 호출.
- Clear Timer by Handle로 카운트다운 종료.
5. 타이머 디버깅 및 주의사항
5.1 타이머 누락 방지
- 타이머가 ClearTimer 없이 재설정되면 중복 호출 가능.
- ClearTimer로 기존 타이머를 명확히 정리.
5.2 타이머 정확성
- 지나치게 짧은 간격(예: 0.01초)은 성능 문제를 유발할 수 있음.
- 필요 시 타이머 간격을 적절히 설정.
5.3 타이머의 라이프사이클
- 타이머는 소유 액터가 제거되면 자동으로 정지.
- 월드가 파괴되거나 GameMode가 변경될 때 관리 필요.
6. 타이머와 네트워크
- 타이머는 클라이언트와 서버에서 독립적으로 작동.
- 멀티플레이어 게임에서 서버의 타이머로 중요한 작업을 동기화.
타이머는 게임의 시간 기반 이벤트를 처리하는 데 매우 유용한 도구입니다. 반복 동작, 지연 실행, 카운트다운 등 다양한 작업에 활용할 수 있으며, 블루프린트와 C++ 모두에서 쉽게 구현 가능합니다. 효율적으로 사용하면 게임플레이의 동적 요소를 강화할 수 있습니다.
🎬 유튜브 채널 🎬
위로그@WiLog
📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌
www.youtube.com
🎬 치지직 채널 🎬
위로그 채널 - CHZZK
지금, 스트리밍이 시작됩니다. 치지직-
chzzk.naver.com
반응형