본문 바로가기
다이어리/내일배움 개발일지

게임개발캠프 - 팀과제(C) 1일차

by E.Clone 2024. 1. 24.

과정명 : 내일배움캠프 Unity 게임개발 3기

전체진행도 : 23일차

부분진행도 : Chapter3.2 - 1일차

작성일자 : 2024.01.24(수)

개발일지 목록 : 클릭


1. 진행중인 과정에 대해

팀 과제 선정

새로운 팀 과제를 시작하였다. 팀원들과 회의를 통해 '탕후루 만들기'라는 게임을 만들기로 정했다.

주어진 레시피에 맞게 하늘에서 떨어지는 과일들을 받아, 10개의 탕후루를 만들면 게임 종료.

오늘 작성한 컨셉기획서에서 퍼온 팀원의 그림. 묘사력이 굉장하다.

매 탕후루마다 레시피와의 일치도에 따라 점수 부여를 하여 집계한다.

역할분담을 하고, 각자 맡을 파트를 확실히 정해 과제를 시작하였다.

나는 GameManager의 구현을 맡았다. 컨셉기획서의 작성 도중 GameManager에서 구현할 내용은 다음과 같다.

마찬가지로 컨셉기획서의 구현 기능 목록 중 일부, 파워포인트를 수상할정도로 잘 활용하는 팀원이 작성했다.

  • 장면전환과 UI 로직 전반, 게임 규칙 로직 전반

구현히 엄청 재밌을 것 같았고 우선해서 지원하는 팀원이 없는 것을 확인하고 바로 맡았다.

첫날이지만 하루종일 불태워 GameManager에서 요구하는 기능의 70% 이상은 구현한 듯 하다.

오늘의 마지막 PR

팀 노션에도 오늘 먹은 것(TIA), 오늘의 특강(GIT)과 QnA의 정리, 스크럼 내용 정리 등 여러가지를 꾸미고, 버전 관리에 익숙해지기 위해 커밋메시지와 PR 등을 계속 다듬도록 노력했다.

하루를 알차게 보내면 시간이 빠르게 간다는 생각이 드는데, 오늘은 그런 것 조차 신경 쓸 여유가 없을 정도로 활동한 것 같다. 살면서 가장 빛나고 있을지도.

2. 오늘 학습에 대해

구현 중에 어째선지 잘 되지 않던 내용

버튼UI가 어째선지 눌리지 않았다. 원인부터 적자면 Scene 내에 EventSystem이 없었다.

같은 이슈를 예전에 한 번 겪은 적이 있었지만, 이 원인을 알아채는 데에 많은 시간이 걸렸다.

처음에는 메서드 자체가 문제라고 생각하여, 디버그를 수 차례 하였지만, 해당 메서드는 실행조차 되지 않았다.

다음은 버튼을 클릭했을 때 실행되는 메서드가 잘 연결되지 않았는지 오브젝트 간 관계나 포함되는 컴포넌트들을 조사했지만 원인을 찾을 수 없었다.

다른 씬과 비교해보는 도중 씬 내에 EventSystem 오브젝트가 없다는 것을 발견하여 원인을 찾을 수 있었다.

해당 이슈가 발생했을 때의 대표적인 증상은 아래와 같다.

  • 버튼이 눌리는 모션이 발생하지 않는다.

버튼이 아닌 그냥 이미지를 상대하는 듯하다는 느낌을 다음에 받는다면, EventSystem 오브젝트가 있는지 확인하는 것을 기억해야겠다.

오늘 구현한 스크립트에 대해

1. 게임 상태 관리 (GameManager.cs):

  • GameState 열거형을 정의하여 게임의 다양한 상태 (MainMenu, Playing, Paused, GameOver)를 관리한다.
  • GameManager 싱글톤 패턴을 구현하여 게임 전반에 걸쳐 하나의 인스턴스만 유지하도록 한다.
  • ChangeState 메서드를 통해 게임 상태를 전환하고, 각 상태에 따른 로직을 구현하였다. (예: 타임 스케일 조정, 사운드 관리).

2. 게임 플레이 로직 (GameManager.cs):

  • StartGame, PauseGame, ResumeGame, RestartGame, BackMainMenu, GameOver 메서드를 구현하여 게임의 주요 행동을 제어하였다.

3. 게임 데이터 초기화 및 로드 (GameManager.cs):

  • ResetData 메서드를 통해 특정 조건에서 게임 데이터를 초기화한다.
  • PlayerPrefs를 사용하여 최고 점수를 로드하고 저장한다.

4. 게임 씬 관리 (GameManager.cs):

  • LoadMainSceneLoadTitleScene 메서드를 사용하여 게임의 메인 씬과 타이틀 씬을 로드한다.

5. UI 관리 (UIManager.cs):

  • UIManager 싱글톤 패턴을 구현하였다.
  • SceneManager.sceneLoaded 이벤트를 사용하여 씬 로딩 시 UI 요소를 찾고 할당하였다.
  • 토글이 필요한 모든 UI 패널의 활성화/비활성화를 위한 메서드들을 제공한다.

6. 버튼 상호작용 (ButtonManager.cs):

  • StartGame, PauseGame, BackMainMenu, ResumeGame, RestartGame 등의 UI 버튼에 응답하는 메서드들을 ButtonManager에 구현하였다.

7. 목표 탕후루 생성 및 진행 업데이트 (GameManager.cs):

  • GenerateTargetTanghulu 메서드를 통해 랜덤한 목표 탕후루를 생성한다.
  • UpdateTanghuluProgress 메서드를 호출하여 플레이어가 쌓은 과일과 목표 탕후루를 비교하고 점수를 계산하며 종료조건을 얻는다.

오늘의 작업을 통해 게임의 핵심 메커니즘과 흐름 제어를 위한 기반을 마련하였고, 각 컴포넌트의 기본적인 상호작용을 설정하였다.

이후, StartDroppingFruits, CalculateAndUpdateScore, ShowTargetTanghulu 등의 메서드에 대한 구체적인 구현을 진행할 필요가 있다.

대부분을 구현하였지만, Player를 담당하는 다른 팀원이 원활한 개발을 하도록 하기 위해서는 과일을 실제로 생성해주는 메서드의 구현이 가장 필요한 부분이다.

3. 과제에 대해

  • StartDroppingFruits, CalculateAndUpdateScore, ShowTargetTanghulu 등의 메서드에 대한 구체적인 구현
  • GameManager에서 더 구현할 내용 찾기...당장 ExitGame 기능(게임 종료 버튼)을 구현하지 않았다는 것도 생각났다.

4. GIT 특강 QnA 정리

깃 특강 중에 나왔던 질의응답 내용이 무척 도움이 되어 정리 해 보았다. 하이라이트는 나의 질문

Q&A

작업 도중에 다른 브렌치나 이전 커밋으로 되돌아가서 확인 해 보고 싶을 때
현재 작업 내용을 커밋해두고 이동하는 게 정상인가요?

  • Stash 사용(이후 설명)

 

씬을 나눠서 작업하는경우 나눠서 작업하다가 마지막에 한씬에 합치는 방식인건가요?

  • (예시를 보여줌)
    • 즉, 같은 씬에서 여러 명이 기능구현을 하는 상태라면, 씬을 나눠서 하는 방식 대신 다른 방법으로.

 

처음 레파지토리 생성할 때 깃 이그노어를 Unity로 설정하면 되나요?

  • Yes

 

개인 적으로 궁금한건데 한명이 에셋을 받아서 적용한걸 올리면 다른사람이 그걸 받았을 때 적용이 되나요?

  • Yes

 

메인에 합치는 작업은 팀장이 아니라 작업을 한 본인이 하는 편이 좋을까요?

  • 케바케. 지금 단계에서는 각자 Merge를 하되, 코드리뷰를 서로 잘 하는 것을 추천

 

나중에 '게임매니저' 에 대해서 수정할 게 생기면 새로 또 브런치를 파서 작업하시는건가요?

  • Yes
  • 과거 이미 메인에 Merge한 브런치를 계속 이용하는 것은 튜터 입장에서 비추. 합친 뒤 하루이틀 뒤에 삭제하는 편.
  • 작업할 게 생길때마다 브런치를 열어서 작업
  • 히스토리에 계속 쌓이면 보기 안좋아서? 관리가 힘듬

삭제한 브런치를 다시 가져오는 방법도 있나용?

  • No

 

내용중에 GithubDesktop 및 유니티 인스펙터에서 한글깨짐 현상도 보여서 생각나서 질문드립니다
/.editorconfig

[*]
charset = utf-8-bom

위와 같이 프로젝트 루트 폴더에 .editorconfig 파일을 만들어 인코딩 문제를 해결하는 방법이 있던데, 현업에서도 이런 밑작업을 하고 시작하는 편인가요?
몇 주 전에 팀 프로젝트에서 이슈(주석이나, '한글이름.png'를 불러오는 코드 등)가 있었을 때에는 코드 내에 한글 사용을 지양하는 걸로 진행했습니다.

  • 맥을 사용하는 사람이 없다면, 그냥 세팅 없이도 하는 편.
  • 실제로 한글 사용을 지양하는 편이 맞는듯.

 

(제일 처음 질문에 이어)Stash에 관해

  • Branch - Stash all changes // 임시저장 후 다른 브런치로 이동(체크아웃) 등 할 수 있음
  • Restore을 통해 Stash했던 내용 가져오기 가능

 

stash 공간은 하나인가요?

  • 확인 필요(확인 안되고 끝난듯)

 

체리픽에 관해

  • 특정 커밋만 선택해서 가져오는법
  • Github Desktop에서도 가능

 

혹시 이미 커밋해버린 친구들을 지우는 방법이 있나요?+커밋 이름도 커밋후에 수정이 가능한지 궁금합니다

  • Push가 된 건 못돌림.
  • 아직 커밋만 된 건 취소 가능 : Undo Commit
  • Amend commit(가장 마지막 푸시된 Commit만 가능) + Forced Push Origin : 이미 푸시한 커밋도 '커밋 메시지'만은 수정 가능
  • Revert?

 

conflict 도중에 a작업물을 선택할거를 잘못해서 b를 선택해서 머지 되었을 경우 다시 conflict 작업으로 돌아가서 b작업물을 선택할 수 있는 방법이 있나요?

  • 미답변
반응형