GameDevelop/Unity팀프로젝트

[TeamProject2_2025.05.16] Unity 2D 팀 프로젝트 Oblivia 회고(1등!)

도도돋치 2025. 5. 16. 22:04
Contents 접기
728x90

Unity 2D 팀 프로젝트 회고 | 《Oblivia》

최근 진행한 Unity 팀 프로젝트를 마치고 회고를 남겨보려고 한다.
정말 최고의 팀원들과 함께한 팀플이었다.

 

메인gif

  • 게임명 : Oblivia
  • 장르 : 탄막 슈팅 류 로그라이크
  • 개발 환경 : Unity 2022.3.17f1
  • 타켓 플렛폼 : Android, PC, Web
  • 개발 기간 : 2025.05.08 ~ 2025.05.15

 

Keep — 잘했던 점, 기억하고 싶은 순간들

이번 프로젝트에서는 처음부터 오브젝트 풀링(Object Pooling) 시스템을 직접 설계하고 적용해봤다.
게임 특성상 탄막 슈팅 장르이다 보니 많은 오브젝트가 빠르게 생성되고 사라지는 상황이 잦았는데, 풀링 시스템을 통해 성능 최적화를 효과적으로 이뤄낼 수 있었다.

 

특히, 팀 분위기가 굉장히 좋았다.
적극적인 소통을 통해 기획 방향성과 구현 목표를 맞춰나갔고,
기획부터 아트, 개발까지 각자의 강점을 살려 역할을 분담하면서 몰입감 있는 게임을 만들어낼 수 있었다.

 

 

Problem — 어려웠던 점과 아쉬움

초반에는 오브젝트 풀에서 객체가 다 소진됐을 때 예외 처리가 되어있지 않았다.


그래서 게임이 진행되다가 몬스터가 몰리거나, 탄환이 과도하게 쏟아지는 상황이 오면
풀에 남은 오브젝트가 없어서 Null 반환이나 에러가 발생하는 문제가 있었다.

 

이외에도 초기 설계 시 풀 크기 설정에 대한 고민이 부족했다.

 

 

Try — 해결 방법과 피드백

오브젝트 풀 문제를 해결하기 위해, 결국 추가 인스턴스를 생성하는 로직을 추가했다.

if (pool.Count == 0)
{
    T objTemp = Object.Instantiate(_prefab, _parent);
    objTemp.gameObject.SetActive(true);
    return objTemp;
}

 

이렇게 수정하고 나서는 풀링 시스템이 훨씬 안정적이 되었다.

이번 경험을 통해 풀링 시스템도 단순한 재사용이 아니라 예외 상황까지 고려해야 한다는 걸 깊게 깨달았다.

 

 

느낀 점

프로젝트가 커질수록 초기 설계가 정말 중요하다는 걸 다시 한 번 실감했다.
특히 Unity에서는 객체 생성과 파괴가 성능에 끼치는 영향이 크기 때문에
오브젝트 풀링은 선택이 아니라 필수라는 것도 확실히 배웠다.

 

또한, 팀 프로젝트에서는 코드만 잘 짜는 게 아니라,
팀원들과 소통하고 역할을 분담하는 과정 자체가 얼마나 중요한지 느꼈다.

 

GitHub, Slack, Notion 등을 통해 협업하면서
버전 관리와 의사소통 모두 유지보수 가능한 방식으로 진행했다는 점도 좋은 경험이었다.

 

 

나의 성장

  • 오브젝트 풀링 설계와 최적화 경험
  • 팀 리드로서의 개별 기능 구현 관리
  • 인터페이스 개념 이해 및 적용
  • Unity 엔진의 메모리/성능 최적화 이해도 향상
  • GitHub를 활용한 팀 협업 능력 향상

 

팀 프로젝트 결과

🔥 우리 1팀 OBLIVIA는 총 49표 중 약 19표(38%)의 득표율로 1등이라는 성과를 달성했다.

짧은 기간 안에 완성도 높은 결과물을 만들어낼 수 있었던 건 팀원들의 노력과 열정 덕분이다.

 

열정있는 팀원과 함께하며 실제로 정말 많은 것을 배울 수 있었던 좋은 시간이었다.

 

 

프로젝트 기능 소개

(필수) 1. 랜덤 방 생성

 

절차적

  • 절차적 생성 방식을 이용하여 방을 생성하고 시작방, 일반방, 보스방으로 나눠 몬스터를 배치하도록 했습니다.
  • 각각의 좌표에 RoomPrefab을 생성하고 여기에 해당하는 Door를 연결해 플레이어가 이동 할 수 있도록 했습니다.
  • 이동시 문이 닫히고, 적을 모두 잡아야 문이 열리는 방식입니다.

 

(필수) 2. 캐릭터 이동과 공격

 

image

  • PC 빌드를 위한 키 입력과 모바일 빌드를 위한 버튼, 가상 조이스틱을 구성했습니다.
  • 이동에 따라 flip.x 변경과 애니메이션 변경이 이루어집니다.
  • 추후에 리팩토링을 한다면 이동 방식을 빌드 타입에 따라 나누고, PC 버전은 뉴 인풋 시스템을 사용하도록 변경 해볼 예정입니다.

 

필수) 3. 적 AI와 공격 패턴

 

KakaoTalk_20250515_013447262Animation

  • FSM과 오브젝트 풀링을 이용해 적과 탄환을 생성하고 재사용 하였습니다.
  • 적의 행동은 상속과 State들을 통해 관리하여 확장에 열려있도록 했습니다.

 

필수) 4. 스킬과 업그레이드 시스템

 

메인gifimage

  • 궁수의 전설처럼 아이템을 얻을수록 효과들이 융합되는 것을 구현하기 위해 모듈 형식으로 제작했습니다
  • 각각의 모듈은 탄환 생성에 관여하는 IFireModule, 탄환 발사 공식에 관여하는 IProjectileModule, 플레이어 스텟에 관여하는 IStatModule 이 있습니다.
  • 아이템을 습득하게 되면 해당 아이템의 스크립터블 오브젝트에서 부착된 모듈을 플레이어에게 건내주고, 이를 Update문에서 통합 관리하여 모든 효과를 융합하여 보여줍니다.

 

(필수) 5. 보스전

 

보스방

  • 보스전 또한 State와 Enemy 를 상속받아 구현했습니다.
  • 보스는 룸 타입이 Boss여야 등장합니다.
  • 보스의 패턴은 순간이동, 도망치기 탄환 발사등이 있고 각각의 패턴이 랜덤하게 등장합니다.

 

(도전) 1. 배경음악과 사운드 효과 추가

image

  • 간단한 설정창을 통해 배경음악을 추가하였습니다.
  • 공격, 이동 등에 대한 효과음은 추가하지 못했습니다.

 

(도전) 2. 간단한 게임 시작 화면

 

인트로

  • 게임 시작 화면과 인트로 씬을 구현했습니다.
  • 인트로씬은 터치하게 되면 스킵되어 게임 시작 화면으로 바로 이동합니다.

 

(도전) 3. 빌드 및 배포

 

빌드

  • 모바일 PC로 빌드를 완성하였습니다.
  • 해상도 대응이 완벽하진 않지만 플레이가 가능함을 확인했습니다.

 

(도전) 4. 간단한 도전과제 시스템

 

도전과재ㅔ

  • 특정 조건에 따라 완료되는 도전과제 기능을 추가했습니다.
  • 도전과제 DB를 통해서 설명과 목표 타입, 완료 여부를 확인 할 수 있습니다.
  • 도전과제가 완료되면 이를 알리는 알림창이 등장합니다.

 

🔗 프로젝트 링크

https://github.com/yuseong01/oblivia

728x90