🗓️ 오늘 하루 일정
✅ 오전
- 09:00 ~ 13:00 : Unity 개발
- NPC에 TextMeshPro 말풍선 부착 및 자동 잡담 시스템 구현
- 총알 피격 시 다른 대사 출력 기능 구현
- 몬스터가 총알을 발사하고, 플레이어가 총알로 상쇄시키는 기능 개발
- 여러 추가 시스템 구현 (몬스터 공격, 효과 처리 등)
🍽️ 점심시간
- 13:00 ~ 14:00 : 점심시간
✅ 오후
- 14:00 ~ 16:00 : Unity 개발
- NPC 및 몬스터 관련 행동 로직 수정
- 총에 맞았을 때 씬 전환 및 게임 재시작 처리 추가
- 무기 피격 시 애니메이션 및 상태 전환 추가
- 16:00 ~ 17:00 : 챌린지반 강의 수강
- 17:00 ~ 18:00 : Unity 개발 재개
- 말풍선 시스템 점검 및 상태에 따른 대사 출력 로직 수정
🍽️ 저녁시간
- 18:00 ~ 19:00 : 저녁시간
✅ 저녁
- 19:00 ~ 21:00 : Unity 개발 마무리
- 화난 상태에서도 NPC 대사 순환 유지 확인
- 개발된 시스템 전체 테스트 및 디버깅
✅ 오늘 학습 키워드
- TextMeshPro 말풍선 시스템 구현
- 상태에 따른 NPC 대사 출력 로직
- 몬스터 총알 발사 및 피격 상쇄 시스템
- 사망 시 씬 전환 및 게임 재시작 처리
- Unity 애니메이션 상태 연동 (화남, 죽음 등)
- NPC 잡담 순환 유지 버그 수정
- 다양한 시스템 통합 및 디버깅
✅ 오늘 학습 한 내용을 나만의 언어로 정리하기
오늘은 NPC와 몬스터의 상호작용과 전투 시스템을 보다 사실감 있게 만들기 위해 다양한 기능들을 구현했다.
먼저 NPC에게 TextMeshPro 말풍선을 부착하고, 자동으로 잡담이 출력되도록 구성했다. 특히 상태가 "화남"일 때에도 잡담이 멈추지 않고 계속 순환되도록 처리하는 데 집중했다. 이 과정에서 상태에 따라 말풍선 내용을 다르게 출력하는 로직을 만들면서, 상태 분기 처리의 중요성을 다시금 체감했다.
또한, 몬스터가 총알을 발사하고, 플레이어가 그 총알을 다시 총알로 쏴서 상쇄시키는 기능도 추가했다. 이때 충돌 판정과 오브젝트 제거 타이밍을 잘 맞추는 것이 중요했다. 물리적인 상호작용처럼 보이게끔 구현하면서, 게임 플레이에 생동감을 더했다.
NPC가 죽을 때에는 단순히 사라지는 것이 아니라 씬이 전환되면서 게임이 다시 시작되도록 만들었다. 이때 SceneManager.LoadScene과 GameManager.instance.StartGame()을 함께 활용해 자연스러운 흐름을 만들었고, BaseController의 Death()를 상속받아 필요한 전용 로직만 오버라이드했다.
마지막으로, 오늘 만든 여러 시스템들이 서로 영향을 주지 않도록 디버깅과 통합 점검을 진행했다. 잡담이 멈추지 않게 유지하는 부분이나, 화남 애니메이션과 말풍선이 겹치지 않도록 하는 처리 등을 하며 디테일을 챙겼다.
🧩 학습하며 겪었던 문제점 & 에러
1. 문제정의
NPC가 화난 상태일 때 잡담이 멈추는 문제
- 평소에는 잡담이 랜덤하게 출력되는데, 화남 상태로 전환되면 말풍선이 더 이상 갱신되지 않음.
시도
- 상태 전환 시에도 RandomTalkCoroutine()이 계속 돌고 있는지 확인
- 화남 상태에서도 StartCoroutine(RandomTalkCoroutine())이 실행되는지 체크
해결 방법
- 말풍선 출력 조건에 상태 제한이 걸려 있었던 부분 수정
- 화남 상태에서도 잡담이 계속 나오도록 조건 분기 보완
2. 문제정의
몬스터가 총알을 발사하지만, 총알이 생성되지 않거나 잘못된 방향으로 발사됨
시도
- Instantiate 위치 및 방향 벡터 확인
- 몬스터의 바라보는 방향 기준으로 발사 방향 설정 로직 점검
해결 방법
- 총알 생성 위치와 방향 벡터를 transform.right 또는 lookDirection 기준으로 명확하게 지정하여 수정
3. 문제정의
플레이어가 발사한 총알로 몬스터의 총알을 제거하는 로직이 작동하지 않음
시도
- OnTriggerEnter2D에서 서로의 태그를 비교하여 충돌 감지
- 총알끼리 충돌이 감지되는지 로그 출력으로 확인
해결 방법
- 총알 간 충돌 레이어 설정을 확인하고, 서로 충돌 가능하게 수정
- 태그 비교 및 Destroy() 로직 추가하여 양쪽 총알 모두 제거 처리
4. 문제정의
NPC가 죽을 때 씬이 전환되고 게임이 재시작되는 구조이지만, GameManager.StartGame()이 호출되지 않음
시도
- NPCController.Death() 안에서 SceneManager.LoadScene() 이후 GameManager.instance.StartGame()이 호출되었는지 확인
- 씬 전환 직후 StartGame 호출이 유효한지 검토
해결 방법
- SceneManager.LoadScene() 이후 바로 StartGame()을 호출하는 것이 아니라, 새로운 씬의 Start()에서 시작되도록 구조 수정 필요
- (혹은 DontDestroyOnLoad 적용 고려)
5. 문제정의
NPC 말풍선이 계속 유지되며 텍스트만 바뀌어야 하는데, 상태에 따라 말풍선 자체가 사라지는 현상 발생
시도
- 말풍선 GameObject 활성 상태 확인
- 상태 변화 시 SetActive(false)가 호출되는지 여부 추적
해결 방법
- 말풍선을 비활성화하지 않고 텍스트만 갱신되도록 구조 수정
- 상태에 상관없이 말풍선 UI는 유지되게 변경
📝 메모
오늘은 정말 많은 기능을 한꺼번에 다루면서 머리가 조금 복잡했지만, 그만큼 뿌듯한 하루였다. NPC의 상태에 따라 다른 대사를 출력하고, 몬스터가 직접 총알을 발사하고, 그 총알을 내 총알로 막아내는 시스템까지… 하나하나 구현하면서 게임 속 상호작용이 점점 풍부해진다는 걸 체감할 수 있었다.
특히 코루틴이 중간에 멈추는 문제나, 총알 충돌 시 동시 제거되지 않는 상황은 예상보다 더 까다로웠지만, 차근차근 로그를 찍고 원인을 파악하며 해결해가는 과정에서 실력이 쌓이고 있다는 걸 느꼈다.
무엇보다 오늘 하루 정말 열심히 달렸다는 느낌이 들어서 스스로가 기특했다. 작은 기능 하나하나에 의미를 부여하고, 더 자연스럽게 보이도록 고민했던 시간이 헛되지 않기를 바란다.
사실..오늘 개발만 하면서 오류 수정을 몇번이나 헀는지 모르겠다ㅎㅎ.. 너무 GPT에 의지하나 싶기도하다.. 오류 수정이나 뭐든 최대한 GPT를 덜 써야겠다 하루하루 열심히 잘 해보자구!! 시간 가는줄도 모르고 개발하다보니 벌써 9시가 다됐다ㅎㅎ 하루가 너무 빠르다..
'스파르타 코딩클럽 > TIL작성' 카테고리의 다른 글
내일배움캠프 21일차 TIL [Unity 생명주기와 C# 알고리즘 핵심 복습] (4) | 2025.07.28 |
---|---|
내일배움캠프 20일차 TIL [메타버스 게임] (6) | 2025.07.25 |
내일배움캠프 18일차 TIL [메타버스 게임] (5) | 2025.07.23 |
내일배움캠프 17일차 TIL [TopDown게임 제작] (3) | 2025.07.22 |
내일배움캠프 16일차 TIL [팀프로젝트 발표 + 유니티 개발] (2) | 2025.07.21 |