Arena invader

  • 💡 게임 개요

    ✨ 장르

    • 보드 게임

    📱 플랫폼

    • Windows
    • WebGL(멀티 플레이 불가능)

    ⏰ 개발 기간

    • 게임 플레이 : 2024-11-08 ~ 2023-10-13
    • 멀티플레이: 2025-01-24 ~ 진행중
  • 💡 게임 개요

    🛠 사용 도구

    • Unity
    • Unity Netcode: 네트워크 기능 구현에 이용
    • EHTool: UI 관리, 언어 변경 기능에 이용
  • 💡 게임 개요

    👤 담당

    • 게임 기획
    • 주사위 동기화 기능
    • 말 이동 및 보드 시스템
    • 능력치 시스템
    • 유니티 네트워크

    🏆 수상

    • 2024년 경북 게임인 게임잼 2등(팀: 나폴리맛 피자)
  • 📖 게임 소개

    Arena Invader는 윷놀이의 기물 이동 방식과 AOS의 성장 요소를 결합한 턴제 게임입니다.

    주사위를 굴려 나온 숫자만큼 기물을 움직이며 능력치를 획득, 전투합니다.

    가장 오랫동안 살아남은 사람이 승리합니다. 턴과 주사위 값은 RPC를 기반으로 동기화했으며, 주사위 결과는 시드값만 공유해 실제 물리 연산 결과를 맞추는 방식으로 구현했습니다.

    제한된 개발 기간에는 먼저 구현할 내용을 인터페이스로 추상화한 뒤, 우선순위가 높은 기능부터 실제로 구현했습니다.

    • 우선 최소 기능을 먼저 구현
    • 시간이 허락하면 더 높은 완성도를 위한 확장 기능을 교체하거나 추가
    • 좌표 이동, 부드러운 이동, 효과가 동반된 이동을 같은 구조 안에서 단계적으로 확장 가능하게 설계
  • 🛠️ 주요 기능 및 기여

    </li> </ul>

    ♟️ 기물 이동 및 도착 이벤트 시스템 모듈화

    • 게임 내 기물의 이동 경로 지정(출발-경유-도착) 방식과 도착 지점에서 발생하는 이벤트를 추상 클래스를 활용하여 모듈화 및 추상화
    • 이동 경로: 다양한 경로 지정 방식을 추상 클래스로 구현
      • 출발, 경유 모두 다음 이동 위치가 A
      • 출발은 다음 이동 위치가 A, 경유는 다음 이동 위치가 B
    • 도착 이벤트: 기물 도착 시 발생 이벤트를 추상 클래스로 분리
      • 새로운 유형의 도착 이벤트를 유연하게 확장할 수 있도록 설계
      • 능력치 상승, 전투 발생, 상점 입장 이벤트 구현 시간 단축
  • 🛠️ 주요 기능 및 기여

    ♟️ 기물 이동 및 도착 이벤트 시스템 모듈화

    • 이동/도착 효과: 기물 이동 및 도착 시 발생하는 시각적/청각적 효과를 IMoveEffect, IArrivalEffect 추상 클래스로 분리
      • 각 효과를 독립적으로 개발하고 기물에 자유롭게 조합하여 적용할 수 있도록 단일 책임 원칙을 강화
    • 모듈화를 통해 게임 규칙과 효과 추가에 드는 개발 비용을 절감하고 시스템의 유연성을 크게 향상
  • 🛠️ 주요 기능 및 기여

    🎲 재사용 가능한 주사위 시스템 구현:

    • 룰렛, 다트 방식의 주사위 값 선택 기능을 구현
    • RPC 기반 동기화를 통해 네트워크 환경에서 주사위 결과를 일치시킴
    • 이를 통해 모든 플레이어가 동일한 주사위 결과를 경험하도록 하여 공정성을 확보
    • 예측 불가능하지만 통제 가능한 게임 플레이 경험을 제공
  • 🛠️ 주요 기능 및 기여

    🔥 리팩토링: 캐릭터 조작 방식의 분리 및 유연성 확보

    • 개선 전: 기존에는 캐릭터 자체에 조작 방식(AI 또는 사용자 조작)이 통합
      • 동일한 캐릭터를 AI와 사용자 모두 조작하게 하려면 중복 개발이 필요
    • 개선: 캐릭터 행동 선택 인터페이스(IActionSelector)를 도입하여 캐릭터와 캐릭터의 행동 선택 방식을 분리
      • 전략 패턴을 적용
      • Character는 IActionSelector에 의해 조작
        • AI 캐릭터에는 AISelector가 할당
        • 사용자 조작 캐릭터에는 GUIActionSelector가 할당
      • 하나의 캐릭터 클래스로 AI 및 사용자 조작을 모두 지원
        • 캐릭터의 동일성을 보장
          • 캐릭터 개발에 드는 시간, 공간 비용을 감소
        • 향후 새로운 조작 방식을 추가하는 데에도 용이