10.16 - TIL

김혁·2025년 10월 16일

TIL

목록 보기
36/84

오늘의 코드카타

오늘의 공부

팀 프로젝트 KPT 회고

Keep - 현재 만족하고 있는 부분

  • 처음부터 끝까지 온전한 게임을 제작하게 되어 좋았고 협업의 과정을 겪어볼 수 있어서 성장 체감을 느꼈다.
  • 멀티플레이 프로젝트는 어떻게 개발해야 하는지, 어떤 문제가 있는지 공부할 수 있어서 좋았다.
  • 게임의 완성도가 전체적으로 높았던 것 같고 기획이 좋았던 것 같다.
  • GAS같은 고급 프레임워크를 배우고 적용할 기회를 얻어서 좋았다.
  • EOS 보이스챗과 같은 외부 플러그인을 사용하여 더 몰입도 있는 게임을 만들 수 있었다.

Problem - 불편하게 느끼는 부분

  • #ifdef 같은 전처리기를 사용해서 log 출력을 특정 모드에서만 실행되도록 하면 더 좋았을 것 같다.
  • 마일스톤 단위로 나눠서 진행하고 회고로 마무리 하는 방법도 좋은 거 같다
  • 원래는 코드 정리도 계획에 들어있었는데 코드 정리를 하지 못해 아쉽다.
  • 폴더 정리가 이상하게 되어서 관리가 힘들었다. 특히 에셋을 찾기가 너무 힘들었다.
  • 노션을 통해 WBS를 정리하고 일정관리를 하고자 했으나, 가시성이 너무 떨어지는 것 같고 많은 사람이 같이 쓰니까 지저분해졌다.

Try - Problem에 대한 해결책, 당장 실행 가능한 것

  • 프로젝트 접두어를 EG_ 이런식으로 붙이고, 에셋은 붙이지 말자
  • GameMode_MainMenu, GameMode_Lobby 이런 식으로 네임 컨벤션을 명확하게 정해서 수정하자
  • 폴더관리 무조건 컨텐츠 > 프로젝트 폴더 내에서 관리하자
  • 개인적으로 WBS를 쓰고, 팀 전체적으로 마일스톤 관리하자
  • ServerRPC_FunctionName, ClientRPC_FunctionName : RPC에 대한 네이밍을 명확히 하자
  • 플러그인을 조심해서 쓰자

오늘의 CS

GameMode

  • 게임 규칙을 정의하는 클래스
  • 역할
    • 게임의 시작 및 종료 조건 : 승패 조건, 점수 계산 방식 등
    • 스폰 관리 : 어떤 Pawn을 사용할지, 어디에 스폰할지
    • 클래스 정의 : PlayerController, Pawn, GameState, PlayerState 등의 기본 클래스를 지정함
  • 특징
    • 서버에서만 존재하며 동작함
    • 한 레벨당 하나만 존재함

GameModeBase vs GameMode

  • GameModeBase
    • 가장 기본적인 게임 진행 관리 기능만 제공
    • 캐주얼 게임, 퍼즐 게임, RPG 등 매치 로직이 명확하지 않거나 단순한 게임에서 활용
  • GameMode
    • GameModeBase를 상속한 확장형 클래스로 더 다양한 기능을 제공
    • 클래식한 FPS/TPS 규칙 (팀전, 스코어, 시간, 승리 조건 등) 지원
    • 경쟁 기반 게임 (FPS, 배틀로얄 등) 에서 활용

GameState

  • 현재 게임의 상태(점수/시간, 팀 정보, 게임 진행 상황 등)를 기록하고 공유하는 클래스
  • 역할
    • 게임의 전역 상태 정보 제공 : 현재 라운드 번호, 경기 시간, 맵 이름 등 게임 전체가 공유해야 하는 정보를 저장함
  • 특징
    • 서버와 모든 클라이언트에게 복제됨 -> 공개적인 정보만 저장
    • UI에서 읽기 전용으로 접근하거나 참조만 가능하게 해야 함
    • GameMode만 수정할 수 있게 보안이 중요

PlayerController

  • 플레이어의 입력과 상태를 제어하는 클래스 -> "플레이어의 뇌"
  • 역할
    • 입력 처리 : 키보드, 마우스, 게임 패드 등 사용자의 입력을 받음
    • Pawn 조종 : 입력에 따라 연결된 Pawn을 조종하는 명령을 내림
    • 플레이어 상태 제어 : 카메라 설정, UI, 인벤토리 등 플레이어 개개인에게만 필요한 제어 로직을 담음
  • 특징
    • 플레이어당 하나씩 존재함 -> 각자의 클라이언트에서 각자의 Pawn 제어
    • 서버와 해당 플레이어의 클라이언트에 존재
      -> 클라이언트에서 다른 플레이어의 컨트롤러는 존재하지 않음

Pawn

  • 게임 세계에 존재하는 물리적 개체인 클래스 -> "플레이어의 육체"
  • 역할
    • 물리적 표현 : 캐릭터 모델, 콜리전, 움직임 등을 담당함
    • 조종 가능 : PlayerController 또는 AIController에 의해 빙의되어 조종될 수 있음
  • 특징
    • 서버와 모든 클라이언트에 복제되어 존재
    • ACharacterAPawn을 상속받아 인간형 캐릭터에 특화된 기능을 추가한 클래스임

PlayerState

  • 각 플레이어의 개별 정보 (점수, 킬/데스 등) 을 저장하는 클래스
  • 역할
    • 개인 상태 정보 저장 : 현재 점수, 레벨, 킬/데스 수 등 특정 플레이어에게 종속된 정보를 저장
  • 특징
    • 서버와 모든 클라이언트에 복제되어 존재
    • 모든 플레이어가 다른 플레이어의 정보를 볼 수 있게 해줌
      -> 다른 플레이어에게 보여줄 정보만 관리를 해야 함
profile
게임 개발자를 향해..

0개의 댓글