Skip to content

2024. 10. 30. 회의록

Yongdori edited this page Nov 6, 2024 · 1 revision

디자인 패턴 논의

Manager
시스템과 자원 등의 생성, 반환, 운용 등 모든 것을 관리
싱글톤 개념을 가짐
예시 : LobbyManager, GameManager, StageManager, SoundManager

Controller
현재 운용되고 있는 시스템이나 자원의 상태를 제어
예시 : InputController, PlayerController, NavigationController

Handler
할당 받은 자원을 운용 또는 처리가 목적일 때 사용
예시 : HttpHandler

GameManager

  • 스테이지 간 전환 (Scene 전환)
  • 매니저 총괄

StageManager

  • 각 스테이지별 레벨 진행 관리
    • 예시 - 한쪽에서 스위치를 눌렀을 때 반대쪽 문이 열리는 것 등

PlayManager

  • 오브젝트 간 상호작용
  • Effect initiate
  • 범위 내 가이드, 음악 스킬 부분
    • 플레이어 내 범위 감지까지는 플레이어 내에서, 감지 시에는 PlayManager에서 호출

SoundManager

  • Audio(Bgm, Sfx) play

Controller

  • Player movement - 플레이어 이동
  • Player Input - 플레이어 공명, 조사 스킬 사용 구현

매니저 시스템

  • 오디오 게임 매니저

    • 오디오 클립을 재생하거나 난이도를 설정하는 데 사용
    • 난이도는 한 번 설정하면 계속 유지
    • 레벨은 플레이와 별도로 관리
  • 게임 매니저, UI 매니저

    • 게임 매니저는 싱글톤 패턴으로, UI 매니저는 신에 상관없이 존재
    • UI 매니저는 Scene별로 존재하며, 각 신에 해당하는 UI를 가짐
    • 플레이 매니저는 Sprint1에선 별로 쓸 일이 없지만 추후 오브젝트간 상호작용 등에서 필요
  • 플레이 매니저

    • 플레이 매니저에서 키 인풋 처리를 해야 하는지
    • 오브젝트 조사와 음악 스킬 사용은 플레이 매니저에서 처리 가능
    • 키 인풋 처리를 플레이 매니저에서 하는 것이 더 나을 것으로 예상
    • 플레이어의 움직임과 스킬 관련 기능을 분리
    • 플레이어 매니저에 스킬 관련 기능을 두는 것이 좋은가? -> 확장성을 고려하면 플레이어 매니저 밖에 스킬 관련 기능을 두는 것이 좋을 것
  • 플레이어 애니메이션 분리

    • 플레이어가 Destroy 되면 스킬을 못 쓰게 하는 것이 자연스러움
    • 컨트롤러에서 플레이어를 제거하고, 컨트롤러만 나오게 함
    • 애니메이션을 분리하는 방법을 고민함
  • 플레이어 주변 상호작용 가능한 오브젝트 찾는 방법

    • 플레이어 주변에 있는 모든 오브젝트를 찾아야 함
    • 상호작용 가능한 오브젝트를 인스펙터로 받아야 함
    • 플레이어 주변 일정 부분만 계속 검사하는 것이 효율적임
  • 게임 오브젝트와 상호 작용

    • 모든 게임 오브젝트는 게임 플레이어를 볼 수 있지만, 게임 플레이어는 모든 게임 오브젝트를 볼 수 없다
    • 게임 매니저를 통해 나무 하나하나를 조작하는 것은 바람직하지 않다
    • 각 게임 오브젝트는 게임 매니저를 볼 수 있지만, 게임에서 모든 게임 오브젝트를 사용하는 것은 이상하다
    • 플레이어와 오브젝트 간의 관계는 매니저에서 제어해도 괜찮을 것 같다
    • 플레이어 매니저에서 타겟을 관리하여 일정 거리 내에 있는 것을 항상 탐지
      • 오브젝트가 들어오거나 나갈 때 플레이 매니저에 전달해야 함
      • 타겟 호출을 통해 오브젝트의 상태를 파악해야 함

세부 구현

  • 동물 애니메이션

    • 동물은 아무것도 누르지 않으면 Idle 또는 정해진 범위 패트롤
  • 물의 흐름 효과

    • 물의 수위 조절을 위해 고도 차이를 구하고 평균값을 찾는다
    • 수문이 열렸을 때 물이 흐르는 효과를 만들고, 부유물을 배경에서 흐르는 것처럼 보이게 한다
  • 나무 세부 구현

    • 파티클을 넣어 나무를 태우는 효과를 구현
    • 나무가 쓰러지는 효과를 구현하기 위해 rigidbody 사용
    • mass of center을 아래에 두어 위쪽만 회전하도록 함

Task 정리

매니저

  • GameManager 초기 세팅 : 매니저들 가져오기, 색/음 enum 만들기
  • Sound Manager : 도~시 음 연주 API
  • Player Music Control : Number Key(1~7) 입력 시 SoundManager 연주 API, Effect Manager 파동 API
  • EffectManager : 빨~보 파동 VFX 발생 (index[ ], power = 1)
  • PlayManager : Object - ObjectDetected < GameObject, isEntered
  • 공명 가능한 물체 - script, 태그 = 붙여 놓고 판단
  • 공명 가능한 물체일 시 그 물체의 공명 가능한 물체에 있는 능력들의 effect 호출… (차례대로, mesh 따라서)
  • 상시로 범위 내에 오브젝트 접근 여부 받아서 ObjectDetected (Enter / Out bool값과 object)

카메라

  • 카메라가 특정 오브젝트 주위를 동그랗게 비추고 다시 커지게 하기 (게임 클리어 연출용으로)

플레이어

  • Player movement - 플레이어 이동, 애니메이션, IK, 애니메이션
  • 물, 나무, 돌과 상호작용 없이는 통행 불가능

나무

  • 나무가 불에 타는 Effect
  • 나무 3단계 높이 구현
  • Life 존재
  • Life 깎이기 API
  • Life 일정 이하로 내려갈 시 지정 방향으로 쓰러짐 구현
  • 쓰러질 때 밑둥 짤림 구현

  • 오브젝트 자체 구현(기능에 따라 종류 다양) - 동그라미 세모 네모… 정도의 다양성 필요 (Asset, blender 등 자유)

  • 돌이 주어진 벡터방향으로 주어진 speed로 굴러간다.

  • 특정 flag가 발동했을때 돌이 player를 따라가도록 구현하기 (궁중에서 둥실둥실하면 더 좋지만 필수는 아님)

  • 발광가능한 돌 prefab 만들어오기 (Asset ~ trigger시 빛 on.off 구)

동물

  • asset 찾기(?)
  • AnimalState [idle, rush] // 평소에는 아이들/ 공명하면 rush
  • Rush + paticle (가능하면) // 돌진
  • Animation // state에 따라 애니메이션 효과
  • path //레벨별 격로

  • 수위 조절 API (단계별 조절 / 기본 수위와 주변 환경(물 아래 바닥)에 따른 조건부 조작 필요)
  • (자료 찾기) 물의 스플래쉬 효과