5주차에 접어들면서 이제는 단순히 "강의 따라 구현"에서 벗어나, 직접 구현해보고 스스로 문제를 해결해나가는 시기가 되었다. 당연하게도 많은 시행착오가 있었고, 그만큼 얻은 교훈도 많다. 특히 Git 연동, UI 한글 폰트 문제, 거리 기반 상호작용, 애니메이션 및 회전 처리 등에서 실제로 겪은 문제들을 통해 깊은 이해를 얻게 되었다.
✅ Git과 GitHub의 첫 연결, 그리고 좌절
처음 Unity 프로젝트를 GitHub에 올리기 위해 git push -u origin main을 입력했을 때, 다음과 같은 에러를 마주했다:
error: src refspec main does not match any
처음엔 왜 이런 오류가 뜨는지조차 몰랐다. 알고 보니 아직 로컬에 main 브랜치가 존재하지 않았기 때문이었다. 이를 해결하기 위해 git branch -M main을 사용해 브랜치를 명시적으로 생성했고, 커밋한 후 다시 푸시를 시도해 성공했다.
이번 경험으로 알게 된 핵심은 다음과 같다:
- Git에서 main 브랜치가 자동으로 생기지 않을 수 있으며, 직접 생성이 필요함
- Git 에러 메시지는 처음엔 무의미해 보이지만, 하나씩 원인을 추적하면 반드시 해결 실마리가 있음
또한 .gitignore 파일 없이 진행했던 점도 반성 포인트였다. Unity의 Library, Temp, Logs 등은 Git에 올리면 안 되는 디렉토리인데, 그걸 포함해서 커밋해버릴 뻔했다. 다행히 .gitignore를 추가해 다시 정리했다.
🧵 TextMeshPro로의 전환과 한글 텍스트 출력 실패
이번 주 가장 짜증났던 문제 중 하나는 "한글 텍스트가 깨진다"는 것이었다. NPC 대사에 한글을 넣었는데, 유니티 기본 Text 컴포넌트에서 글자가 전혀 나오지 않거나 깨진 형태로 출력됐다.
해결을 위해 다음과 같은 과정을 시도했다:
- Google Fonts에서 나눔고딕/본고딕 등 한글 폰트를 가져와 적용 시도 → 실패
- 직접 TextMeshPro로 변환 후 TMP 폰트 애셋을 수동 생성 → 절반 성공
- 대사 출력 UI 전체를 TextMeshPro 기반으로 재구성함으로써 출력 문제 회피
아직 모든 문제를 해결한 것은 아니지만, 이제부터는 기본 Text 대신 TextMeshPro를 사용하는 방향으로 프로젝트를 운영할 예정이다. 특히 Text → TextMeshPro로 전환하는 방법(TMP Import, Font Asset 생성 등)을 처음 배우게 되어, UI 시스템에 대한 이해도가 한 단계 상승했다.
🎭 NPC 자동 대사 발동 이슈: 범위를 뚫고 나오는 유령의 목소리
처음 NPC를 구현했을 때, 이상한 점이 있었다. 플레이어가 멀리 떨어져 있어도 NPC의 첫 대사가 자동으로 출력되는 것이다. 상호작용 키(E)를 누르지 않아도, 일정 거리 안에 들어가면 대화가 튀어나오는 구조였는데, 문제는 그 거리 범위 계산이 제대로 안 되고 있다는 것이었다.
코드를 분석해보니 대사 출력 거리와 E 키 입력 범위를 나누어 처리하고 있었지만, firstDialogueDistance의 설정이 지나치게 넓고 조건 분기에서도 플레이어 위치 검사가 부정확했다. 이를 수정하면서 처음으로 **Gizmos.DrawWireSphere()**를 사용하여 NPC 주변의 대사 트리거 범위를 시각적으로 확인했다.
이 시각화 덕분에 문제가 정확히 어떤 거리에서 발생하는지 파악할 수 있었고, 결국 거리 기반 상호작용을 개선할 수 있었다.
🎮 플레이어 이동과 시선 처리: 생각보다 복잡했던 방향성
플레이어를 WASD로 이동시키고 마우스 방향을 기준으로 캐릭터의 좌우 회전을 처리하는 부분을 구현했다. 처음엔 단순히 transform.Translate() 정도로 해결될 줄 알았지만, 실제로 구현하면서 다음과 같은 복잡성이 있었다:
- Vector2.Normalize()를 통해 대각선 이동 속도 보정
- 애니메이션 파라미터 IsMoving을 Animator 또는 AnimationHandler를 통해 설정
- 마우스 방향에 따라 flipX 처리와 무기 피벗(WeaponPivot) 회전
이 과정에서 Camera.main.ScreenToWorldPoint()로 마우스 위치를 월드 좌표로 바꾸는 방법, 회전각 계산, 그리고 방향성 판단(directionToMouse.x < 0) 같은 벡터 기반 연산 개념들을 체득할 수 있었다.
이제는 단순히 이동과 회전을 넘어서, 그 방향 정보를 애니메이션과 무기 시스템에도 연동할 수 있을 정도의 기반을 쌓았다고 느낀다.
❤️ 리소스 관리 시스템: 체력, 무적, 사망 그리고 이벤트
플레이어 체력 시스템도 이번 주에 새로 도입했다. ResourceController는 다음의 기능을 포함한다:
- 현재 체력, 최대 체력 관리
- 데미지 적용 및 무적 시간 처리 (쿨다운)
- 체력 변화에 따라 애니메이션 및 사운드 실행
- 체력 변화 이벤트를 다른 시스템(UI 등)에서 구독 가능하게 델리게이트로 제공
이 코드를 통해 처음으로 델리게이트와 이벤트 기반 구조를 써보게 되었고, ?.Invoke()로 null 체크하며 이벤트를 호출하는 패턴도 익혔다. 또한 무적 시간 구현을 위해 Time.deltaTime을 활용한 타이머 컨트롤을 도입했다.
*사실 예전처럼 크기를 늘리는게 아니라 슬라이더가 이미 있어서 그게 제일 신기했다*
🧪 PlayerPrefs와 UI 연동: 최고 웨이브 기록 시스템 구축
미니게임에서 반복 플레이를 유도하기 위한 요소로 최고 기록 시스템이 필요했다. 이를 위해 다음을 구현했다:
- WaveDataManager를 통해 최고 웨이브 수를 PlayerPrefs에 저장 및 불러오기
- HighWaveUI에서 TextMeshPro를 활용해 최고 기록을 출력
- UI와 게임 데이터를 동기화하여 사용자 피드백 제공
이 과정에서 PlayerPrefs.GetInt, SetInt, Save() 등의 기초 API를 익혔으며, 싱글톤 패턴을 통해 게임 오브젝트가 씬 전환 후에도 유지되도록 설계하는 방법도 배웠다.
🎥 카메라 추적 구현
마지막으로 CameraFollow 스크립트를 통해 플레이어를 부드럽게 따라오는 카메라를 구현했다. 핵심은 다음과 같다:
- Vector3.Lerp()를 사용한 위치 보간
- 일정한 offset을 적용하여 플레이어 중심이 아닌 약간 위쪽 시야 유지
- LateUpdate()를 사용하여 움직임 후 카메라 위치 보정
단순한 기능 같지만, Lerp 개념과 카메라 위치 제어 방식, 그리고 플레이어 추적 구조에 대한 이해를 쌓을 수 있었다.
📌 5주차 회고: 나는 아직 미완성이다. 그러나 계속 만들어지고 있다.
지금까지 구현한 기능들만 보면 제법 '그럴싸해' 보일 수도 있겠지만, 아직 혼자서 처음부터 끝까지 구조를 세우는 것은 어렵다. Git도, UI도, 회전 처리도 모두 막히는 포인트가 있었고, 그때마다 강의나 검색에 의존했다. 그럼에도 불구하고 지금 느끼는 가장 큰 변화는 문제 상황을 인식하고, 해결 루트를 떠올리는 힘이 생기기 시작했다는 것이다.
나는 지금도 시행착오를 겪고 있고, 남들보다 확실히 느리고 더디게 구현하고 있다. 누군가는 벌써 응용 기능을 도입하고 있고, 나는 여전히 기초에서 버벅일 때가 있다. 8년 가까이 부사관으로 군 복무를 하며 게임 개발과 거리가 멀었던 시절을 핑계로 삼고 싶진 않다. 그저 지금의 나는 분명히 부족하고, 그런 나를 인정하고 받아들이는 중이다.
그럼에도 불구하고, 적어도 낙오하지는 않고 싶다는 욕심은 분명히 있다. 이왕 시작한 길, 포기하지 않고 한 걸음씩 나아가고 싶다. 완벽하진 않아도, 계속 배우고 도전하며 따라가려 한다. 아직은 느리지만, '문제를 스스로 인식하고 해결하려는 자세'는 갖고 있다고 믿는다. 그 자세가 언젠가는 나를 단단하게 만들어줄 것이라 희망하고 있다.
이제는 TextMeshPro도 적용할 줄 알고, 애니메이션 전환도 어느 정도 할 수 있으며, GitHub에 프로젝트를 푸시할 수 있게 되었다. 다음 주에는 이 기초를 바탕으로 더욱 복잡한 시스템들을 구조적으로 구현해보는 데 도전할 예정이다.
'팀스파르타 내일배움캠프' 카테고리의 다른 글
| 2025.05.08 / 아이템 시스템 개발 회고 및 트러블슈팅 (0) | 2025.05.08 |
|---|---|
| 🧠 Unity 부트캠프 5주차 TIL & 트러블슈팅 회고록 (0) | 2025.05.07 |
| 📚 TIL - 2025년 05월 05일 (월) / 강의에 나온 개념 정리 (1) | 2025.05.05 |
| 📚 TIL - 2025년 5월 1일 (목) / 본격 구현 단계 진입 (2) | 2025.05.01 |
| 📚 TIL - 2025년 4월 30일 (수) / 유니티 주간 두번째 과제!! (1) | 2025.04.30 |