Giter Club home page Giter Club logo

herogue_.'s Introduction

⭐️ 2022 MWU 공모전에 제출한 로그라이크 1인 프로젝트입니다.


시연 영상


주요 기능

⚡ 절차적 던전 시스템 [스크립트 폴더]

  • 랜덤맵 생성 : 현재 스테이지에 따라 레벨 디자인
  • 몬스터 스폰 : 현재 스테이지에 따라 레벨 디자인
  • 미니맵 표시 : 초록색(플레이어), 하얀색(일반), 빨간색(보스, 최장거리) [bfs]
  • ProceduralGif

⚡ 스킬 시스템 [스크립트 폴더]

  • 스킬 데이터 : Scriptable Object
  • 스킬시스템 스크립터블

  • 스킬 UML
    • Ability Base : Scriptable Object 상속 ⇒ 모든 스킬 공통 멤버 정의
    • Ability Implement : Ability Base 상속 ⇒ 각 스킬 구체화
    • Ability FSM : Ability Base 참조 ⇒ 각 FSM의 스킬 데이터가 갖는 스킬 상태 관리
    • Pooling Manager : 스킬 시전 또는 종료 시 스킬 오브젝트와 사운드 풀링
  • 스킬 다이어그램 final drawio

  • 스킬 FSM
  • 스킬시스템 UML drawio

  • 스킬 충돌 : Particle Collision
  • 스킬 시전

⚡ 퀘스트 시스템 [스크립트 폴더]

  • 퀘스트 데이터 : Scriptable Object
  • 퀘스트 스크립터블

  • 퀘스트 UML
    • Quest Base : Scriptable Object 상속 ⇒ 모든 퀘스트 공통 멤버 정의
    • Count Base : Quest Base 상속 ⇒ 카운트 기반 공통 멤버 정의, 프로퍼티를 사용해서 셋될 때 완료조건 체크
    • Objective Base : Quest Base 상속 ⇒ 목표 기반 공통 멤버 정의
    • ILoop : 반복 퀘스트 인터페이스 멤버 정의
    • ISequential : 순차 퀘스트 인터페이스 멤버 정의
    • Quest Implement : 기반 퀘스트를 상속, 필요 시 반복 퀘스트와 순차 퀘스트를 다중상속해서 각 퀘스트 구현
    • Quest Manager : Quest Base형 리스트를 참조해서 퀘스트 진행 상황 관리
  • 퀘스트 다이어그램 drawio

⚡ 인벤토리 시스템 [스크립트 폴더]

  • 아이템 데이터 : User Class ⇒ 각 아이템이 참조
  • 인벤토리 유저 클래스

  • 아이템 ↔ 플레이어 상호작용 : 아이템 획득과 장비 장착
  • 아이템 플레이어 상호작용

  • 아이템 ↔ 상점 상호작용 : 아이템 구매와 사용
  • 아이템 상점 상호작용

⚡ 풀 시스템 [스크립트]

  • 오브젝트 풀링 : 무기, 스킬, 코인, 박스, 몬스터, 맵, 장식, 이펙트, 체력바, 플로팅 텍스트, 사운드, 아이템, 펫, ETC...
  • 풀링 인스펙터

  • 사운드 풀링 : 자주 사용되는 사운드, 특히 스킬 시전 사운드는 무조건 재사용이 필요했음
  • 스킬 풀링

✨시행착오와 개발 후기

  • 기술적 어려움
    • 해결1 : 함수의 호출 스택을 따라가거나 로그 찍어보기
    • 해결2 : try~catch를 통한 예외처리하기
    • 해결3 : static과 flag 필드 사용하기

  • 가독성 저하와 유지보수 어려움
    • 원인1 : 프로젝트 초기 설계 고민 시간에 투자 하지 않았음
    • 원인2 : 구현 후 기능이 정상 작동 한다면 코드 검토를 후순위로 미뤘음
    • 해결1 : 각 함수가 하나의 책임을 맡을 수 있도록 분리하기
    • 해결2 : 함수 내부 중복되는 코드조각은 하위 함수로 분리하기

  • 구체적인 설계의 중요성
    • 개발 초기 설계보다 구현에 집중 하는 것이 효율적이라고 생각했음
    • 개발 진행 과정에서 간단한 기능의 추가에도 여러 곳에 접근 해야 하는 상황이 많아졌음
    • 앞으로의 개발에서는 구현 전 충분한 설계 시간을 갖도록 노력 중임

  • 코드의 지속적인 검토와 리팩토링의 중요성
    • 구현한 기능이 정상적으로 작동 한다면 코드의 검토를 후순위로 미뤘음
    • 프로젝트의 규모가 커지면서 중복코드와 불필요한 코드가 많아져 예외처리에 시간이 오래걸림
    • 코드 리팩토링을 진행하면서 더 간결한 코드를 작성하고 프로젝트 구조를 다시 정리 할 수 있었음

  • 기반지식의 중요성(Tech)
    • 컴파일러 : 스킬 FSM을 컴파일러 시간에 배운 전이함수에 따른 상태전이로 이해했음
    • 소프트웨어공학 : 클래스 구조를 설계 할 때 소공 시간에 배운 UML이 도움되었음
    • 객체지향 언어 : 상속 관계 설계 시 객체지향 언어 시간에 배운 상속과 다형성이 도움되었음
    • 알고리즘 : 보스방을 위한 최장거리를 구하거나 미니맵 표시를 위해 bfs 알고리즘을 사용했음

herogue_.'s People

Contributors

leejunghwi avatar

Watchers

 avatar

herogue_.'s Issues

보스 몬스터 추가

보스 몬스터 2명 추가
총 세명 보스를 3, 6, 9 스테이지 까지 나오게
그 이후 스테이지는 랜덤보스

튜토리얼

퀘스트 형식으로 첫 보스까지 진행
첫 보스를 만나면 컷신 연출(시네머신 + 타임라인)

스크립트 모듈별 분리

각 스크립트가 하나의 기능만 수행할 수 있게
플레이어 및 몬스터 스크립트 모듈별로 분리

시크릿 상점

시크릿 방에 10% 확률로 고급무기를 팔고 장비강화가 가능한 상점 만들기

세이브

마을 게시판에 스테이지 기록 및 플레이어 정보(장비, 스킬 등등) 저장

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.