최고점수를 기록하고 불러오는 로직을 작성해 보겠습니다.
WBP_Main을 열고 HoriozontalBox를 선택하고 Ctrl-D를 누르면 자식까지 복사됩니다. 텍스트를 변경합니다.
최고점수 갱신하기
점수를 획득할때 마다 최고 점수와 비교해 큰 경우 Best를 갱신해 줍니다.
점수는 게임모드에서 저장하고 있으니 게임모드GM_Shooting 에서 갱신하겠습니다. 점수의 갱신은 BP_Bullet에서 적과 충돌할때 게임모드의 AddScore함수를 Call 했으므로 게임모드내 AddScore함수를 변경하면 됩니다.
GM_Score 변수에 최고 점수를 담을 BestScore변수를 Integer로 마련합니다.
AddScore 함수안에 CurrentScore를 저장후 다음 노드를 추가해 줍니다. Current가 Best보다 크다면 Current를 Best로 교체하라는 겁니다.
이제 BestScore를 Widget에 갱신되도록 Bind해줍니다.
WBP_Main으로 가서 BestData를 선택하고 디테일에서 Text>CreateBinding해줍니다.
BestScore는 GM_Shooting에 BestScore변수에 저장되어 있으므로 Casting후 접근해서 텍스트와 연결해 줍니다.
점수를 파일로 저장하기
게임이 종료되면 BestScore를 날라갈 겁니다. 이걸 하드디스크에 저장해 보겠습니다.
컨텐트브라우저 우클릭후 블루프린트를 만들고 All에서 SaveGame 클래스를 찾아 클릭합니다. 이름을 BP_SaveGame으로 합니다.
에디터를 열고 ScoreData를 Integer타입으로 만듭니다
GM_Shooting으로 이동해 SaveScore 함수를 만듭니다 SaveData(Integer) 변수도 만듭니다.
SaveScore를 더블클릭해서 에디터로 들어간뒤
오른쪽 디테일에서 Inputs+를 클릭하고 SaveValue:Integer를 추가해줍니다.
CreateSaveGameObject노드를 추가하고 Class를 방금만든 BP_SaveGame을 선택합니다. ReturnValue위를 우클릭후 변수로 승격을 선택합니다.
이름을 SaveInstance로 변경합니다.
BP_SaveGame의 객체인 SaveInstance에서 ScoreData에 접근할수 있습니다.
Input SaveValue와 ScoreData를 연결해줍니다.
저장하기 위해 맨 마지막에 SaveGameToSlot노드를 추가하고 SaveInstance객체를 연결해줍니다. SlottName을 지어줍니다.
이제 저장된 BestScoreData를 불러오기 위해 LoadScoreData함수를 생성합니다. 디테일에서 Outputs+ 하고 BestScore:Integer를 만들어 줍니다. 불러온 스코어를 리턴하기 위해서겠죠
저장할때는 SaveGameToSlot이었으니 불러올때는 LoadGameToSlot 노드를 사용합니다. SlotName은 Save할때와 같아야 하겠죠. 리턴Value를 BP_SaveGame으로 Cast합니다
그럼 BP_SaveGame의 ScoreData에 접근해서 그 값을 리턴할수 있습니다.
위 로직은 문제가 없으나 만일 한번도 저장된적이 없다면 에러가 납니다. 따라서 로드하기전 저장된 데이터가 있는지 검사해야 합니다. LoadDataScore 시작부분에 검사하는 로직을 추가합니다. DoesSaveGameExist를 추가하고 꼭 SlotName을 적어줍니다. ReturnValue가 참일 경우만 Branch를 이용해 실행합니다.
점수를 파일로 저장하는 SaveScore, LoadDataScore를 만들었으니 사용해봅니다.
우선 파일로 저장될곳은 점수가 갱신되고 Best를 판단하는 AddScore함수 안 입니다.
저장된 데이터는 GameMode가 맨먼저 시작되는 BeginPlay 맨뒤에 추가해주면 됩니다. 리턴된 스코어를 BestScore변수에 저장합니다.
실행해서 Best가 갱신되고 게임을 재 시작하면 Best가 저장되어 있습니다
'언리얼게임프로젝트 > 슈팅게임 블루프린트' 카테고리의 다른 글
Unreal Shooting Game 패키징하기 (0) | 2025.03.11 |
---|---|
점수 UI 제작하기 (0) | 2025.03.10 |
알파 버전 스태틱메시 교체 (0) | 2025.03.10 |
배경 만들기 (0) | 2025.03.10 |
충돌처리 Collision (0) | 2025.03.10 |