KOTY는 언리얼 엔진 5.6으로 개발된 마리오 카트 8 디럭스를 모작한 레이싱 게임입니다. 이 프로젝트는 고급 카트 물리, 동적인 아이템 시스템, AI 제어 상대방, 다양한 게임 상태를 포함한 여러 게임 플레이 메커니즘을 선보입니다.
이 프로젝트는 플레이어가 다양한 트랙에서 AI와 경쟁하는 3D 카트 레이싱 게임입니다. 드리프트, 부스트, 아이템 사용과 같은 고전적인 아케이드 레이싱 요소들을 특징으로 합니다.
카트의 움직임과 물리는 커스텀 물리 엔진에 의해 처리되어 재미있고 몰입감 있는 운전 경험을 제공합니다.
-
AC_KartBase: 게임 내 모든 카트(플레이어 및 AI 제어)의 기본 클래스입니다.- 움직임: 가속, 마찰, 회전 및 속도 제한.
- 드리프트: 드리프트 시작 및 유지 메커니즘과 관련 부스트를 포함합니다.
- 물리: 커스텀 중력, 서스펜션 및 충돌 처리.
- 상태 관리: 스턴 및 부스트와 같은 상태를 처리합니다.
-
AC_PlayerKart:AC_KartBase를 상속하며 플레이어 특정 기능을 추가합니다.- 입력 처리: 언리얼의 Enhanced Input 시스템을 사용하여 가속, 조향, 드리프트 및 아이템 사용을 위한 플레이어 컨트롤을 관리합니다.
- 카메라 제어: 플레이어 카트를 따라가는 스프링 암 카메라 시스템을 구현합니다.
- 애니메이션 및 효과: 다양한 액션에 대한 플레이어 애니메이션 및 시각/청각 피드백을 관리합니다.
AI 시스템은 플레이어에게 도전적이고 사실적인 상대를 제공하도록 설계되었습니다.
AAiKartController: AI 제어 카트의 동작을 지시하는 AI 컨트롤러입니다.- 스플라인 추적: AI 카트는 미리 정의된 스플라인을 따라 트랙을 탐색합니다.
- 동적 행동: AI는 트랙 및 장애물 존재 여부에 따라 속도와 조향을 조절할 수 있습니다.
- 장애물 회피: 트랙의 장애물을 감지하고 회피하기 위한 기본 로직입니다.
AAIKartNew: AI 카트의 폰 클래스로, 자체 물리 및 서스펜션 시뮬레이션을 포함합니다.
아이템 시스템은 플레이어가 다양한 파워업을 사용할 수 있도록 하는 핵심 게임 플레이 기능입니다. 이 시스템은 모듈식이며 쉽게 확장할 수 있습니다.
-
아이템 기본 클래스:
AKotyItemBase:ApplyItemEffect및OnUseItem과 같은 공통 기능을 정의하는 모든 아이템의 추상 기본 클래스입니다.APhysicItemBase: 월드에 물리적 존재를 가지며 중력의 영향을 받는 아이템(예: 껍질, 바나나)의 기본 클래스입니다.APhysicTrackingItemBase: 대상을 추적할 수 있는 아이템(예: 붉은 등껍질)을 위한 특수 기본 클래스입니다.
-
아이템 컴포넌트:
UKotyItemHoldComponent: 카트가 아이템을 보유하고 사용하는 능력을 관리합니다. 아이템 획득(무작위 또는 특정) 및 사용을 처리합니다.UKotyItemHitComponent: 카트에 부착되어 아이템에 맞았을 때 감지하고 해당 효과를 적용합니다. 무적 메커니즘을 포함합니다.UKotyMovementComponent: 물리적으로 시뮬레이션되는 아이템을 위한 커스텀 이동 컴포넌트로, 중력, 튕김 및 반사를 처리합니다.
-
구현된 아이템:
ABananaItem: 다른 카트를 스핀 아웃시키기 위해 트랙에 떨어뜨릴 수 있습니다.AGreenTurtleItem: 직선으로 날아가는 발사체입니다.ARedTurtleItem: 레이스에서 다음 카트를 추적하는 발사체입니다.AMushroomSmallItem/AMushroomBigItem: 일시적인 속도 부스트를 제공합니다.ABlackBombItem: 지연 후 폭발하여 주변 카트에 영향을 미칩니다.AStarItem: 일시적인 무적 및 속도 부스트를 부여합니다.ASquidItem: 다른 모든 레이서의 화면을 가립니다.ACoinItem: 작은 속도 부스트를 제공합니다.
게임의 흐름과 규칙은 여러 핵심 클래스에 의해 관리됩니다.
-
AC_RaceGameMode: 메인 레이스 루프를 관리합니다.- 상태 머신: 레이스 상태(
Cinematic,Ready,Play,End)를 제어합니다. - 플레이어 관리: 플레이어를 생성하고 레이스 시간을 관리합니다.
- 저장/로드:
UC_KotySaveGame을 통해 최고 레이스 시간 저장 및 로드를 처리합니다.
- 상태 머신: 레이스 상태(
-
AC_MenuGameMode: 모드 선택 및 카트 선택과 같은 다양한 화면을 탐색할 수 있도록 사전 게임 메뉴 시스템을 관리합니다. -
AC_RaceManager: 모든 카트의 순위를 추적하고 업데이트하는 등 게임 플레이 중 레이스 특정 로직을 관리합니다.
AC_BoostZone: 트랙에서 통과하는 모든 카트에 속도 부스트를 제공하는 구역입니다.AC_EndZone: 랩을 추적하고 레이스를 종료하는 역할을 하는 결승선입니다.AC_StartLakitu: 시각적 신호로 레이스 시작을 알리는 캐릭터입니다.
UI는 플레이어에게 레이스 중 필수 정보를 제공합니다.
UC_RaceWidget: 다음을 표시하는 메인 인게임 HUD입니다:- 현재 아이템.
- 랩 카운트.
- 플레이어의 현재 순위.
- 레이스 타이머 및 카운트다운.
UC_EndWidget: 최종 시간 및 순위를 보여주는 레이스 후 화면입니다.
C++ 소스 코드는 Source/KOTY/ 아래의 다음 주요 디렉터리로 구성됩니다:
/(루트):AC_KartBase,AC_RaceGameMode,AC_MenuGameMode와 같은 핵심 게임 플레이 클래스를 포함합니다.AI_Player/: AI 컨트롤러 및 AI 카트 폰의 본거지입니다.Gimmick/: 부스트 패드 및 결승선과 같은 트랙 기능을 위한 액터를 포함합니다.Item/: 모든 아이템 관련 클래스를 포함하며, 다음으로 더 세분화됩니다:Base/: 아이템의 추상 기본 클래스.Byproduct/: 아이템에 의해 생성되는 액터(예: 폭발).Component/: 아이템 시스템을 위한 재사용 가능한 컴포넌트.Implement/: 각 아이템의 구체적인 구현.
PlayerKart/: 플레이어 제어 카트 및 해당 컨트롤러를 포함합니다.UI/: 사용자 인터페이스 위젯을 위한 C++ 클래스.Utility/: 이징 함수를 위한UC_MathUtility와 같은 헬퍼 클래스 및 함수를 포함합니다.