● 이번 목표
- 예외 처리나 방어 코드 꼭 쓰기
- 객체 지향으로 코드 작성하기
- 주석으로 코드 설명하기
- 도전 과제 까지 다하기
● 추가로 도전할 부분
- 뽑기 구현 → 미니 게임 보상으로 얻은 티켓으로 뽑기 가능
● 오늘 할일
캐릭터 이동맵 설정카메라 추적과 이동 범위 제한NPC (대화는 아직, 기반은 구현)독버섯 피하기 미니게임, 점수 저장
● 오늘의 트러블 슈팅
#1 플레이어 정지 후 강제 플립 문제
아래와 같이 플레이어 이동 정지 후 강제 플립 되는 문제를 발견했다.
▼문제 영상
원인을 찾아보니 아래와 같이 direction == 0 (정지일때) 의 조건도 같이 계산 하고 있었다.
m_SpriteRenderer.flipX = direction.x < 0;
조건을 나누는것으로 해결했다.
if (direction.x < 0)
{
m_SpriteRenderer.flipX = true;
}
else if (direction.x > 0)
{
m_SpriteRenderer.flipX = false;
}
▼해결 영상
#2 NPC 충돌후 표시되는 UI위치가 밀리는 문제
플레이어가 NPC에 충돌을 하면 SPACE를 누르라는 UI를 표시를 구현했다.
동작 확인 하는 도중에 UI위치가 밀리는 현상을 발견했다.
▼문제 영상
UI를 표시할 좌표가 월드 좌표에 존재하고 있어
WorldToScreenPoint를 사용해 스크린좌표로 변환해주었다.
Camera.main.WorldToScreenPoint(m_ShowUIPos.position);
원인을 확인해보니 좌표는 플레이어가 움직일때 마다 바뀌는데
한번 밖에 실행이 안되는OnTriggerEnter2D 안에서 계산을 하고있었기 떄문이었다.
OnTriggerEnter2D안에서가 아닌 OnTriggerStay2D안에서 계산을 하니 해결이 되었다.
▼해결 영상
#3 점수가 기하급수적으로 늘어나는 문제
버티는 시간으로 점수를 추가하는 로직을 구현했다.
하지만 실행을 해보니 점수가 기하급수적으로 늘어나는것을 발견했다.
▼문제 영상
코드를 다시보고 원인을 찾아보니
Update 함수는 초당 60프레임(60FPS)이라면 1초에 60번 실행되는걸 까먹고
m_CurrentTime가 계속 누적되고 있는데 거기에 +를 해줘서 여러번 증가하고 있던것이였다.
m_CurrentTime += Time.deltaTime;
Score += (int)(m_CurrentTime);
+를 빼주고 Mathf.FloorToInt()를 사용해 정수 부분만 넣어주니 해결 됐다!
Score = Mathf.FloorToInt(m_CurrentTime);
▼해결 영상
#4 게임을 재시작 하면 버섯이 더 많이 생성되는 문제
게임 재시작 로직을 구현하고 난뒤, 재시작을 해보니 버섯이 더 많이 생성되고있는것을 발견했다.
▼문제 영상
이유를 찾아보니 Initalize()에서 아래의 코드가 재시작 할때 마다 호출되고 있었기 때문이었다.
InvokeRepeating("CreatePoisonMushroom", 0.0f, m_RepeatCreateTime);
InvokeRepeating 함수는 한 번 호출되면 중복 실행을 방지하는 기능이 없었다.
그래서 코루틴을 쓰기로 했다.
StopCoroutine()을 사용하여 쉽게 중단 할 수 있기 때문에 아래의 코드로 수정했다.
public void Initalize()
{
m_Controller = (SceneBase.Current as AvoidMushroomSceneController);
if (m_MushroomCoroutine != null)
{
StopCoroutine(m_MushroomCoroutine);
}
m_MushroomCoroutine = StartCoroutine(ICreatePoisonMushroom());
}
private IEnumerator ICreatePoisonMushroom()
{
while (true)
{
CreatePoisonMushroom();
yield return new WaitForSeconds(m_RepeatCreateTime);
}
}
수정했더니 중복 없이 버섯이 생성되었다!
▼해결 영상
'과제' 카테고리의 다른 글
[Unity,C#] 메타버스 제작 과제 3일차 (0) | 2025.02.19 |
---|---|
[Unity,C#] 메타버스 제작 과제 2일차 (0) | 2025.02.18 |
[TextRPG-팀 프로젝트] 기반 설계 (0) | 2025.02.10 |
[TextRPG-팀 프로젝트] 데이터 관리,퀘스트 구현 (0) | 2025.02.10 |
[TextRPG] 게임저장을 해보자(+ 음악재생) (0) | 2025.02.04 |