Project 3 : 88 Soul Light

2023. 12. 15. 21:25완료 프로젝트/Project3 : 88 Soul Light

"88 Soul Light"는 스파르타 코딩클럽의 '내일배움 캠프 Unity 1기' 교육과정의 최종 프로젝트로 제작한 게임으로

이전 프로젝트 들은 Unity에서 제공하는 Unity Collaborate를 통해 버전을 관리했고 오브젝트 풀링, 디자인 패턴 같은 기술들을 모르는 상태였다. '내일배움 캠프'를 진행하며 Github를 통한 버전 관리, 다양한 기술들, 트러블 슈팅 등 프로젝트 정리를 많이 배웠고 이렇게 성장한 부분들을 게임에 활용하며 개발했다.본 글은 내가 구현한 기능과 내가 겪은 경험을 바탕으로 작성한 글이며 프로젝트의 전체적인 내용은 따로 첨부하였다.

 

1. 프로젝트 소개

2. 게임 설명

3. 구현 기능

4. 사용된 기술

5. 트러블 슈팅

1. 프로젝트 소개

88 Soul Light 게임 소개

"88 Soul Light"는 2D 소울라이크 게임으로 다양한 패턴의 보스들과 플레이어 액션으로 모든 보스몬스터를 처치하는 게임이다.

  • 다양한 맵 기믹을 파훼하며 일반 몬스터, 보스 몬스터와 전투하고 얻은 재화로 아이템을 구매하거나 능력치를 강화하여 최종 보스 몬스터를 처치
  • 콤보어택, 스킬 사용, 패링, 대쉬 등 다양한 플레이어 액션을 통해 보스의 패턴을 파훼하는 스타일리쉬한 전투를 지원

 

3. 게임 설명

플레이어 키 세팅, 도우미 역할
일반 몬스터 종류
보스몬스터 종류
게임 UI

 

3. 구현 기능

  • 아이템
    • 스크립터블 오브젝트를 사용해 아이템의 기본 정보를 만들어 줌
  • 인벤토리 기능
    • 옵저버 패턴을 사용해 아이템이 추가되면 UI를 업데이트 하도록 함
    • 오브젝트 풀링을 사용해 인벤토리 슬롯을 추가
    • delegate를 사용해 아이템 클릭시 소비 / 장비 타입별 '사용한다'의 기능을 다르게 설정(사용한다 / 장착한다)
  • 상점 기능
    • 상점 아이템 배치, 필드 아이템 등은 SO를 기반으로 정보를 복사
    • 아이템 구매시 재화 감소, 인벤토리의 아이템 추가 이벤트 발생
  • 장비 장착 시스템 및 관리 시스템
    • 무기, 방어구 장착시 캐릭터 스탯에 영향
    • 장착관리 UI에서 관리 가능
  • UI 관리 시스템 
    • 전체화면으로 구성해 많은 정보를 띄워줌
    • 표시전환 기능을 추가해 추가 정보를 볼 수 있게 함
    • Linked List 구조를 활용해 중간의 요소에 접근하기 용이함
  • 스킬 시스템 
    • 스크립터블 오브젝트를 사용해 스킬의 기본 정보를 만들어 줌
    • 액티브 스킬은 사용후 파괴 조건을 만들어 줌
    • 버프 스킬은 Reflection을 사용해 버프 내용에 부합하는 플레이어 스탯에 접근함
    • 전체 맵 사이즈와 미니맵 사이즈를 정규화해 미니맵 제작
    • 세이브 포인트와 빠른 이동 기능

 

4. 사용한 기술

  • 스크립터블 오브젝트로 아이템과 스킬 정보를 관리하여 메모리 사용을 절약
  • 오브젝트풀링 기술을 사운드와 몬스터가 드롭하는 소울에 적용해 메모리 사용을 절약
  • ESC 버튼을 누르면 열린 순번대로 팝업 UI 종료, 중간 순번 팝업 UI 선택시 첫 순번으로 가져오는 팝업 UI 시스템 구현, 이후 전체화면 UI로 변경하였으며 표시전환 기능으로 재활용
  • 싱글톤 패턴을 사용해 UI 매니저, 사운드 매니저 등 매니저들이 관련 스크립트를 관리하기 편하게 함

 

5. 트러블 슈팅

  • 이미 사용되어 사라진 아이템에 접근하는 오류 발생
    • Awake나 Start를 사용하지 않고 Init() 함수를 따로 작성해 생명주기와 관계없이 처리
  • UI 관리시스템 변경
    • 더 많은 정보를 띄워주고 게임의 메모리 사용을 절약하기 위해 ‘전체 화면 UI’로 변경
  • 인벤토리 UI 슬롯 번호가 모두 0으로 부여 됨
    • 아이템을 추가할때만 번호를 부여하는 메서드를 호출하도록 변경
  • 플레이어가 NPC, 드랍 된 소울의 Trigger를 인식하지 못함
    • Project Settings - Editor 에서 ‘펫 오브젝트’가 땅과 벽을 제외하고 충돌이 일어나지 않게 설정

 

 

시연영상

중간 https://www.youtube.com/watch?v=AfnBvApwdDI&t=131s

 

최종 https://www.youtube.com/watch?v=8pFZsFt76aY&t=5s

 

자세한 내용은 당시 작성한 브로셔에서 볼 수 있습니다.

https://teamsparta.notion.site/88SoulLight-194de85d7e244cde9f94a1bb08c27bbb

 

 

- 개발환경 : Unity2D, C#, Github

- 개발인력 : 이민열, 조병우, 박종수, 맹주한, 곽민규

- 개발기간 : 2023/10/23 ~ 2023/12/14

- 깃허브 주소 : https://github.com/Nightshadow0911/88Soullike

- 서비스 주소 : https://devmini.itch.io/88soullight