2주간의 C# 프로젝트를 마무리하고, 오늘부터 Unity 프로젝트를 다시 시작한다. 본격적인 팀 프로젝트에 앞서 개인 프로젝트를 먼저 진행해보도록 하겠다.
Unity 개인 프로젝트
프로젝트 구현 계획
Rigidbody와 collider 등을 이용하여 2D 캐릭터를 자유롭게 이동할 수 있도록 한다. 방향키 혹은 WASD를 사용한다.
- 타일맵을 이용하여 맵을 구성하고, 오브젝트를 배치하여 상호작용 및 다른 맵 탐색 등이 가능하게 만든다.
- 맵 내에서 미니 게임을 실행할 수 있도록 하고 점수를 UI에 실시간 표시하며 기록 및 저장한다.
- 게임 종료 시 맵으로 복귀하고 결과를 표시한다.
- 캐릭터 이동 시 카메라가 자연스럽게 따라오는 기능을 구현한다.
구현 내용
GIT 리포지토리 및 프로젝트 생성
- GitHub를 통해 리포지토리를 생성하고, 프로젝트를 생성했다.
- 리포지토리 생성 시 Gitignore파일을 같이 생성해주었다.
- Gitignore가 적용되지 않는 오류가 있었다.
- 리포지토리 폴더에 있던 Gitignore 파일을 프로젝트 폴더로 이동시켜 해결할 수 있었다.
와이어프레임 작성
- FigJam을 통해 간단하게 와이어프레임을 세우기로 했다.
맵 생성
- 나는 Tilemap 기능을 이용하여 메인씬을 제작해보기로 했다.
- 하지만 과제 조건 중 외부 에셋 말고 강의에서 제공한 에셋을 사용하라는 조건이 있었기에, 이 에셋을 사용하는 강의까지 마저 듣고 완료를 해야했다.
Unity 강의 - 플래피 버드
게임 기본 요소
- 중력에 의해 떨어지는 플레이어 오브젝트를 화면을 클릭하거나 스페이스 바를 눌러서 점프시켜 장애물 사이를 통과해 나가는 게임.
- 버튼 하나만 가지고 할 수 있는 단순한 조작
- 장애물이 계속 등장하며 점점 어려워지는 플레이
- 간단하고 직관적인 배경과 디자인이 특징적이다.
수강 중 의문점
대부분의 내용은 이전에 배웠던 내용들이 변형된 것이라 그렇게 이해가 안되진 않았지만, 강의를 따라가며 작업해보던 중 이전 조 팀원분이
"왜 background나 ground는 CompareTag를 이용하여 충돌 이후 처리를 하는 반면 Obstacle은 collision.GetComponent<Obstacle>를 이용하는 지"에 대한 의문을 제기해주셨다.
다음은 이 궁금증에 대해 해결하고 정리한 내용이다.
CompareTag를 사용하는 경우
background와 ground는 충돌 후 해당 오브젝트가 어떤 종류인지를 간단히 식별하기 위한 대상이다.
- 따라서 굳이 복잡하게 컴포넌트를 가져올 필요 없이 태그만 비교해서 로직을 실행하는 것이 빠르고 효율적이다.
- 또한
CompareTag는 GetComponent보다 훨씬 가볍고 빠르기 때문에 최적화에도 도움이된다.
- 즉 충돌한 오브젝트가 단순히 어떤 종류인지만 확인만 하면 된다면
CompareTag를 사용한다.
GetComponent<>()를 사용하는 경우
obstacle처럼 단순히 오브젝트 종류만 구분하는 것이 아니라, 그 오브젝트가 가진 스크립트의 기능이나 상태를 활용해야 하는 경우에 사용한다.
- 현재 강의를 따라가자면, 해당 오브젝트가 새로운 위치로 재배치하는 로직이 필요하기 때문에, 단순 태그 비교로는 해결할 수 없고, 재배치 로직이 들어있는 컴포넌트를 직접 가져와야 한다.
- 따라서
GetComponent<>()를 통해 해당 스크립트를 가져온 후, 필요한 메서드를 호출하는 방식으로 활용된다.
회고 및 느낀점
- 오늘 강의를 진행하면서 단순히 코드를 따라서 작성하고 있었는데, 왜 이런 방식으로 코드를 작성하는가에 대해 고민할 수 있는 기회가 생겨서 덕분에 답을 찾을 수 있었다.
- 위에서 배운 내용을 통해 앞으로 프로젝트를 진행함에 있어서 단순 식별과 기능 호출을 구분해서 처리할 수 있겠다.
- 강의와 별개로 이전 팀에서 프로젝트가 다소 일찍 끝나는 바람에 잠시 코드 작성을 안했더니 다시 처음으로 돌아간 것만 같은 기분이 들었다.
- 아직 구현해보지 못한 기능들을 혼자 구현해야 한다는 생각에 불안감이 들기도 하지만, 빠르게 적응하도록 하겠다.
- 내일은 강의를 전부 듣는 것을 목표로 오랜만에 조금 일찍 출석해볼까 한다.