
오늘 드디어 프로젝트 완료 되었다.
그래도 TIL은 써야되니까
오늘 아침까지 수정한 부분 중 업적에 관련된 것에 대해 작성하기로 했다.
지금까지 만들었던 것을 마무리하고 최종적으로 합치고 난 뒤 발견한 문제점이다.
업적 시스템을 만들었고, 그걸로 인해 맵과 쿠키가 해금이 되게 하였는데,
정작 업적 달성 시 완료가 되었는지 UI에 연결을 안해두어서
그 점을 먼저 수정하였다.
// 변수 선언부
public string message;
----------------------------
private void Start()
{
// 초기화 진행
achievements["Dodge"] = new Achievement("Dodge", "10회 연속 장애물 회피 업적 달성 : 스테이지 2 해금 완료", 10);
achievements["Jelly"] = new Achievement("Jelly", "젤리 100개 먹기 업적 달성 : 천사맛 쿠키 해금 완료", 100);
achievements["Score"] = new Achievement("Score", "600점 달성 업적 달성 : 스테이지 3 해금 완료", 600);
}
기존엔 텍스트가 없었고 그냥 이름과 목표치만 있었는데, 텍스트를 하나 추가 해서 설정해주었다.
public void ShowAchievement(string achievementMessage)
{
// 업적 달성 메시지를 설정
achievementText.text = achievementMessage;
// 업적 UI 활성화
achievementUI.SetActive(true);
// 3초 후에 업적 UI를 숨김
StartCoroutine(HideAchievementUIAfterDelay(3f));
}
private IEnumerator HideAchievementUIAfterDelay(float delay)
{
yield return new WaitForSeconds(delay); // 지정된 시간만큼 대기
achievementUI.SetActive(false); // UI를 숨김
}
업적 완료 시 해당 텍스트를 업적UI에 설정해주었고,
코루틴을 사용해서 3초간 보여주고 다시 숨겨줬다.
이게 한번만 작동해야되기 때문에 조건도 필요한 부분에 추가해주었다.

( 이렇게 보인다 )
위에 것을 추가해주고 문제를 하나 더 발견했다.
맵과 쿠키가 업적을 달성했을때 열리는데 여기서 맵이 문제가 있었다.
스테이지를 클리어하면 UI에 NEXT버튼이 있는데 그 버튼을 눌르게 되면
업적 완료 여부와 상관없이 다음 스테이지로 넘어가졌다.
또한 게임 종료 시 업적 완료된 것이 초기화 되서 다시 처음부터 해야됬다.
이건 아주 큰 문제이기 때문에 바로 수정에 들어갔다.
// 업적 진행 사항 저장
public void SaveAchievement(string achievementKey, bool isComplete)
{
PlayerPrefs.SetInt(achievementKey, isComplete ? 1 : 0);
PlayerPrefs.Save();
}
// 업적 진행 사항 불러오기
public bool LoadAchievement(string achievementKey)
{
return PlayerPrefs.GetInt(achievementKey, 0) == 1;
}
우선 저장을 해주기 위해 PlayerPrefs를 사용하였다.
이부분은 튜터님이 피드백 해주셨는데 PlayerPrefs는 간단한 정보만 사용하고
저장 관련은 다른쪽을 사용하라고 하셨다.
이 부분은 잘 모르기 때문에 한번 찾아봐야겠다.
void ShowClearUI()
{
UIManager.Instance.ChangeState(UIState.Clear); // UI 활성화
nextButton.SetActive(false); // Next 버튼 숨기기
if (GameManager.Instance.stageNumber == 1 && GameManager.Instance.LoadAchievement("Dodge"))
{
nextButton.SetActive(true);
}
else if (GameManager.Instance.stageNumber == 2 && GameManager.Instance.LoadAchievement("Score"))
{
nextButton.SetActive(true);
}
else if (GameManager.Instance.stageNumber == 3)
{
nextButton.SetActive(false); // Next 버튼 숨기기
}
exitButton.SetActive(true);
}
UI에서 아이에 업적이 달성 되었을때만 버튼을 보이게 변경해주었다.
혹시 몰라서 마지막 스테이지에서는 버튼을 숨기는 걸 넣어두었다.(사실 없어도 될 듯?)

버튼 활성화도 문제 없이 작동하였고, 업적도 진행 사항도 잘 불러와졌다.
길면서 짧았던 1주일이었던 것 같다.
그래도 팀과제를 하는 동안 열심히 했던 것 같아 만족 중이다.
결과물도 이정도면 나름 괜찮게 나온 듯 하다.
물론 아직 개발에 있어 부족한 점은 아주 많지만, 차근차근 배운다는 생각으로
앞으로도 열심히 해야겠다...