2025-06-12 TIL

최종 프로젝트

레벨 이동 로직 최적화

이동하려는 레벨의 종류 자체는 개수가 적지만, 레벨을 이동하는 로직마다 이동하려는 레벨을 참조하고 있어서 굉장히 많은 수의 참조가 생겨났습니다.

이 부분에 대해 레벨을 관리하는 책임만 가진 클래스를 분리하여 작업을 효율적으로 할 수 있게 하고, 메모리 사용량을 줄이기 위한 시도를 해보았습니다.

기존에 UDeveloperSettingsUGameInstanceSubsystem을 사용하여 데이터테이블을 관리하였는데, 이를 응용하여 레벨에 대해서도 같은 맥락으로 관리할 수 있도록 해주었습니다.

이때, 처음에는 Get함수를 구현하여 특정 레벨을 반환해주는 함수를 구현하고, 레벨 이동하는 함수를 호출해주었는데, 함수를 불필요하게 두번 호출해야한다는 점을 발견했습니다.
이를 수정하기 위해서 이동 하고자 하는 레벨에 대해 함수를 호출할 경우 바로 레벨을 이동하도록 해주었습니다.
예를 들면, GetDungeonLevel, GetMainMenuLevel 등이 있었다면 이것을 OpenDungeonLevel, OpenMainMenuLevel등으로 변경해주면서 로직을 특정 레벨로 바로 이동하도록 해주었습니다.

그런데 이 경우 코드가 중복된다는 문제가 있었습니다.
이를 해결하기 위해서 TravelToLevel이라는 함수를 하나 구현해주고 매개변수로 열거형 값을 하나 설정해주었습니다.
매개변수로 열거형 값을 받는 이유는 열거형 값으로 조건식을 설정해주고, 각 분기마다 서로 다른 레벨을 가져오도록하기 위함입니다.
이렇게 코드를 작성하여 코드의 중복을 최대한 줄일 수 있었습니다.

기타 기능 구현

기존에 구현한 상호작용 시스템을 활용해 자동으로 상호작용이 가능한 액터들을 구현해주었습니다.
자동으로 상호작용이 되는 기능을 구현할 때, 인터페이스에 변수를 추가하기보다 함수만 추가하여 사용하고자 했는데 그로인해서 인터페이스를 상속 받는 액터들은 자동으로 상호작용이 가능한 액터인지 반환하는 함수를 추가해주었습니다.


세이브를 제거하는 기능또한 구현해보았는데, 로그라이크 장르이다보니 던전에서 사망했을 경우 특정 종류의 세이브 파일들은 제거할 필요가 있었습니다.
그렇기 때문에 세이브 파일이 존재하는지 확인하는 함수를 알아내어 세이브 파일을 확인하고, 제거하는 함수를 호출하여 세이브 파일을 제거하는 기능을 추가해주었습니다.

해당 기능은 던전에서 사망한 경우, 게임을 포기하는 경우 등에서 세이브 파일이 제거되도록 해주었습니다.


이외에 메인 메뉴에서 불러오기 버튼을 구현해주었는데, 게임 상태에 따라 버튼이 나타나도록 해주었습니다.

예를 들어 불러올 파일이 없는 경우 버튼이 나타나지 않아 위젯을 재배치하고, 불러올 파일이 있는 경우 불러오기 버튼을 포함한 상태가 됩니다.

Date:     Updated:

카테고리:

태그:

TIL 카테고리 내 다른 글 보러가기

댓글남기기