TIL 25.02.28 - 팀 과제_완

강진규·2025년 2월 28일

Today I Learned

목록 보기
23/34
post-thumbnail

오늘 드디어 프로젝트 완료 되었다.

그래도 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주일이었던 것 같다.
그래도 팀과제를 하는 동안 열심히 했던 것 같아 만족 중이다.
결과물도 이정도면 나름 괜찮게 나온 듯 하다.

물론 아직 개발에 있어 부족한 점은 아주 많지만, 차근차근 배운다는 생각으로
앞으로도 열심히 해야겠다...

0개의 댓글