TIL 25.03.19 - 팀 과제 "완"

강진규·2025년 3월 19일

Today I Learned

목록 보기
34/34
post-thumbnail

오늘은 마감 날이였기 때문에 별로 안건드릴 생각이었다.
근데 하다보니 이것저것 하게 되서 생각보다 시간이 촉박했다.


[ 불러오기 버튼 오류 수정 ]

이것때문에 어제 12시까지 작업을 해서 겨우 고쳤는데
특정 상황에서 (모든 스테이지를 클리어하고 다시 마지막 스테이지로 가서 클리어 했을때)
불러오기의 마지막 스테이지 버튼이 하나 더 생기는 문제가 발생하였다.

SaveData saveData = SaveSystem.LoadGame();
HashSet<int> availableStages = new HashSet<int>(saveData.clearedStages)
{
    saveData.currentStage // 현재 진행 중인 스테이지도 포함
};

if (!stageManager.CheckClear())
{
    foreach (int stage in availableStages)
    {
        Button newButton = Instantiate(loadButtonPrefab, buttonContainer);
        newButton.GetComponentInChildren<TextMeshProUGUI>().text = (stage + 1).ToString();
        newButton.onClick.AddListener(() => stageManager.LoadStage(stage));
    }
}

팀원분의 생각대로 list를 HashSet으로 변경하니까 해당 오류가 수정되었다.
HashSet으로 중복된 값은 자동으로 제거되기 때문에 위의 문제가 깔끔하게 해결될 수 있었다.


[ 나가기 버튼 추가 ]

기존 타이틀 씬에서는 나가기 버튼이 없었는데 이 부분을 추가해주었다.

if (exitGameButton != null)
    exitGameButton.onClick.AddListener(stageManager.OnApplicationQuit);
    
------------------------------------------------------------------------

public void OnApplicationQuit()
{
	isStage = false;
	PlayerPrefs.SetFloat(timeKey, time);
	PlayerPrefs.Save();

#if UNITY_EDITOR
	UnityEditor.EditorApplication.isPlaying = false;
#else
	Application.Quit();
#endif
}

나가기 버튼을 하나 추가해주고 OnApplicationQuit를 연결해주었다.
또 유니티 에디터에서 실행시에는 종료되게 하는 코드도 추가해주었다.


[ 인게임 UI 추가 ]

기존에는 인게임에서 타이틀 화면으로 나가거나 즉시 다시 시작하는 기능 없었다.
이 부분은 필요하다고 판단해서 빠르게 추가해보았다.

public void OnInGameUI(InputAction.CallbackContext context)
{
    isEnabled = !isEnabled;
    ingameUI.SetActive(isEnabled);
    Cursor.lockState = isEnabled ? CursorLockMode.None : CursorLockMode.Locked;
    CharacterManager.Instance.Player.Controller.cursorInputForLook = !isEnabled;
    CharacterManager.Instance.Player.Controller.look = isEnabled ? Vector2.zero : CharacterManager.Instance.Player.Controller.look;
    Time.timeScale = isEnabled ? 0f : 1f;
}

백틱키를 통해(1 옆에 있는거) 인게임 UI를 토글할 수 있게 만들었고
isEnabled 상태에 따라서 커서와 타임스케일, 플레이어의 움직임을 제어해주었다.


[ 시연 영상 ]

https://www.youtube.com/watch?v=pdtYMgZHiv4


이번 팀 과제는 너무 재밌게 진행했던 것 같다.
좋은 팀원들과 같이 작업하니까 2배는 재밌었다.
물론 어려웠던 부분도 많이 있었지만 최종 결과물을 보니 꽤나 만족스러웠다.
마지막에 빌드를 못한것은 좀 아쉽지만 그래도 나름 괜찮게 만든 것 같아서
개인적으로도 만족도가 높았던 팀 프로젝트였던 것 같다.

0개의 댓글