학교 오픈소스 과제로 유니티를 활용해 플래피 버드 클론 게임을 개발했다. 이번 프로젝트는 유니티의 기본 기능과 2D 게임 개발 워크플로우를 익히는 데 초점을 맞췄으며, 유튜브 강의와 커뮤니티 자료를 참고해 완성했다. 개발 과정에서 얻은 경험과 깨달음을 정리했다.
1. 프로젝트 개요
- 프로젝트 목표: 플래피 버드의 핵심 메커니즘을 구현해 유니티 2D 게임 개발을 학습한다.
- 참고 자료: 유튜브 플래피 버드 강의를 기반으로 개발했으며, 에셋은 ‘우리집 고양이’와 ‘냥캣’ 캐릭터를 참고해 커스터마이징했다.
- 게임 특징:
- 플레이 방식: 화면 터치 시 캐릭터가 위로 점프하고, 터치하지 않으면 중력에 의해 하강한다.
- 파이프: 랜덤한 높이로 생성되며, 파이프 사이를 통과할 때마다 점수가 증가한다.
- 목표: 최대한 많은 파이프를 통과해 고득점을 기록한다.
- 배포: 안드로이드 APK 파일로 빌드해 깃허브에 업로드했다.
- 깃허브 링크: https://github.com/AzureSoda/open-source-project_games
- 설치 방법: 깃허브의 Release 섹션에서 최신 APK 파일을 다운로드해 안드로이드 기기에 설치 후 실행한다.
2. 개발 과정
캐릭터 이동 및 물리
- 구현: Rigidbody2D와 Collider2D를 사용해 캐릭터의 점프와 하강을 구현했다. 터치 입력(Input.GetMouseButtonDown)을 감지해 상향 힘(AddForce)을 적용했다.
- 구현 경험: 중력 값과 점프 힘의 균형을 맞추는 데 시간이 걸렸다. 초기에는 점프가 너무 약하거나 과도하게 높았으나, ForceMode2D.Impulse와 적절한 힘 값을 조정해 자연스러운 움직임을 얻었다.
- 배운 점: Rigidbody2D의 물리 설정은 게임의 느낌에 큰 영향을 미친다. 디테일한 조정이 중요하다.
파이프 생성 및 랜덤 배치
- 구현: 파이프는 프리팹으로 제작해 Instantiate를 통해 주기적으로 생성했다. Random.Range를 사용해 파이프의 높이를 랜덤화했다.
- 구현 경험: 초기에는 파이프 간격이 너무 좁거나 넓어 난이도가 불균형했다. 파이프 생성 주기와 높이 범위를 조정해 적절한 난이도를 구현했다.
- 배운 점: 랜덤화는 플레이어 경험에 큰 영향을 미치므로, 적절한 범위 설정과 테스트가 필수다.
점수 시스템
- 구현: 캐릭터가 파이프를 통과할 때 점수를 증가시키는 로직을 추가했다. OnTriggerEnter2D를 사용해 파이프 사이의 트리거 영역을 감지했다.
- 구현 경험: 점수가 중복으로 증가하는 버그가 발생했다. 트리거 호출을 단일화하고 플래그 변수를 추가해 문제를 해결했다.
- 배운 점: 충돌 이벤트는 디버깅이 중요하며, 트리거 로직은 간결하게 유지해야 한다.
에셋 및 시각적 디자인
- 구현: ‘우리집 고양이’와 ‘냥캣’을 참고해 캐릭터와 배경을 디자인했다. SpriteRenderer로 스프라이트를 렌더링하고, 간단한 애니메이션을 추가했다.
- 구현 경험: 스프라이트 크기와 해상도 조정이 처음엔 어려웠다. Pixels Per Unit 설정을 조정해 화면에 맞게 최적화했다.
- 배운 점: 에셋의 시각적 품질은 게임의 첫인상을 결정한다. 에셋 관리와 최적화가 중요하다.
빌드 및 배포
- 구현: 안드로이드 플랫폼으로 빌드해 APK 파일을 생성했다. Build Settings에서 안드로이드 타겟을 설정하고, 깃허브 Release에 업로드했다.
- 구현 경험: 빌드 과정에서 APK 설치가 실패하는 문제가 있었다. 안드로이드 SDK 경로와 빌드 설정을 확인해 해결했다.
- 배운 점: 플랫폼별 빌드 설정과 디버깅은 배포 과정의 핵심이다.
3. 개발 중 주요 이슈와 해결
- 점프 불균일: 점프 높이가 기기마다 달랐다. Time.deltaTime을 사용하지 않고 ForceMode2D.Impulse를 적절히 조정해 일관성을 확보했다.
- 파이프 생성 오류: 파이프가 화면 밖에서 생성되는 문제가 있었다 혀. 생성 위치를 화면 좌표로 제한하고, 디버그 로그로 위치를 확인해 수정했다.
- 터치 입력 문제: 모바일에서 터치 입력이 간헐적으로 무시되었다. Input.GetMouseButtonDown 대신 Input.touchCount를 테스트하며 안정성을 높였다.
4. 마무리
이번 플래피 버드 클론 프로젝트를 통해 유니티의 2D 게임 개발 워크플로와 물리 시스템, 입력 처리를 깊이 이해할 수 있었다. 특히 간단한 게임이라도 난이도 조절과 사용자 경험이 얼마나 중요한지를 체감했다.
'공부 > 유니티' 카테고리의 다른 글
괴혼 클론 코딩하기 (0) | 2023.09.15 |
---|---|
유니티 핵심 개념 정리 - Gizmo, Sprite, 스크립트 생명주기, 코루틴, 쓰레드 등 (0) | 2023.08.11 |
유니티 물리와 이벤트 함수 정리 - 힘, 충돌, 생명주기 함수 (0) | 2023.04.09 |
유니티 핵심 개념 정리 - URP, 컴포넌트, 입력 시스템, 물리 (0) | 2023.02.20 |
개발일지: BangUlEe Dinogame - 공룡 게임 클론 개발 (0) | 2022.12.30 |