2026.02.02

박민재 (Daype)·2026년 2월 2일

구현목표

Wave시스템구현

  • 1개의 레벨안에 Wave형식으로 진행되는 게임시스템을 설계한다.

구현설계 의사코드 : 게임시작 버튼을 눌러서 진입시 웨이브 1시작 웨이브당 제한시간 존재 제한시간이 끝나면 필드위에 나와있는 오브젝트들을 리셋하고 2웨이브 시작 같은방식으로 3웨이브까지진행 후 3웨이브가 끝나면 다음 레벨로 이동 난이도 상승. 웨이브가 시작될때마다 화면에 메세지 출력

필요한 변수

CurrentWaveIndex : 현재 진행중인 웨이브를 표시

SpawnedItem : 웨이브가 시작될때 스폰된 오브젝트들을 초기화해주거나 이미 소환된 오브젝트들을 관리할 변수

WaveStartTimerHandle : 웨이브가 시작될때마다 화면상에 메세지를 띄울 타이머 변수

필요한 함수

EndWave : 웨이브 종료시 호출될 함수

PrintWaveStart : 웨이브시작시 메세지를 출력해주는 함수

ClearItemInstance : 웨이브가 시작할때 이미 스폰되어있는 오브젝트들이있다면 파괴해주는 함수

실제구현

게임의 전반적인 시스템을 관리하는 GameState클래스에 필요한 변수 및 함수 생성

매 웨이브가 시작될때마다 LevelTimerHandle이 새로 작동을 하기 때문에 웨이브가 끝나면 등록된 타이머를 초기화 이후 GameInstance를 캐스팅해온 뒤, 합산점수에 더해주고, 웨이브 증가 후 HUD상에 표시될 웨이브 인덱스 업데이트 마지막으로, StartLevel함수 호출을 통해 다음웨이브 시작

LevelTimerHandle : 웨이브 시작시 진행시간이 담겨있는 한번만 진행되는 타이머

타이머가 끝난 후 LevelUp 함수가 콜백되어 호출될경우 웨이브 인덱스의 값을 확인해 최대웨이브까지 진행이 된경우에만 새 레벨로 이동하도록 조건문

PrintWaveStart 함수가 호출될때마다 화면 좌측상단에 웨이브시작 메시지 출력 ClearTimeInstance 함수가 호출될때마다 스폰된 아이템이 담긴 SpawnedItem 배열변수 내부를 순회하는 for문을 통해 유효할경우 스폰잔여 아이템이 남아있으니 모두파괴 이후 for문 탈출 후 배열을 초기화하여 다시 스폰된아이템을 담을 수 있게 세팅

TArray<TWeakObjectPtr<AActor>> SpawnedItem : 해당객체의 존재여부를 확인하고(참조필요) 삭제하기위해(수명연장을 원하지않음) TWeakObjectPtr 사용하여 객체들을 관리 WeakObjectPtr 사용한다는것 자체가 수명연장을 원하지 않는것이기에 UPROPERTY 사용할경우 문법상오류 주의

구현결과

0개의 댓글