[UE5] Project_StackBlock #1 기획 초안

ChangJin·2024년 7월 22일
0

Unreal Engine5

목록 보기
85/114

이번 글에서는 탑쌓기 게임의 기획 초안을 다룹니다. 이 게임의 주요 기능, 사용 기술, 각 기능의 구현 방법 등을 상세히 설명합니다. 블럭의 부분 삭제, 블럭 스폰, 블럭 이동, 사용자 입력 처리, UI 구성, 패배 조건 등 게임의 핵심 요소들을 다루며, 프로젝트 진행을 위한 구체적인 로드맵을 제시합니다.

한줄 요약하면 탑 쌓기 게임입니다.

깃허브!
https://github.com/ChangJin-Lee/Project_StackBlock

날짜

  • 2024.07.22

프로젝트 기간

  • 2024.07.22 ~ 2024.07.31

참여인원

  • 2명

참고 자료

작업 비율

  • BP (블루프린트)와 C++의 비율 결정 필요. 현재 계획은 프로토타입 단계에서는 BP와 C++을 같이 사용하고, 최적화와 확장 단계에서는 C++만을 활용할 예정.

초안

1. 블럭의 부분 삭제

블럭 게임의 핵심 기능 중 하나는 블럭의 일부를 삭제하는 기능입니다. 이는 플레이어가 탑을 쌓는 과정에서 장애물을 제거하거나 블럭을 조작하는 데 유용합니다.

다음처럼 사용할 예정

방법

  1. Collision → Impact point → Delete

    • 블럭이 충돌한 지점에서 삭제 작업을 수행합니다. 이를 위해 충돌 이벤트를 감지하고, 해당 지점을 기준으로 블럭의 일부를 삭제합니다. 예를 들어, 충돌한 지점의 좌표를 기준으로 작은 큐브 형태의 블럭을 삭제할 수 있습니다.
  2. Ray → Distance → Delete

    • 레이캐스트(Raycast)를 사용하여 특정 거리 내에 있는 블럭을 삭제합니다. 플레이어가 특정 지점으로 레이캐스트를 발사하여, 그 경로에 있는 블럭을 제거할 수 있습니다.
    • 예제 코드:
      FHitResult HitResult;
      FVector Start = PlayerCamera->GetComponentLocation();
      FVector End = Start + (PlayerCamera->GetForwardVector() * RayDistance);
      GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECC_Visibility);
      if (HitResult.Actor != nullptr)
      {
          HitResult.Actor->Destroy();
      }
  3. Boolean을 사용한 제거

    • 부울 연산(Boolean Operation)을 사용하여 블럭의 특정 부분을 삭제합니다. 이는 주로 복잡한 지오메트리 조작에 사용됩니다.
    • 참고 동영상 1: Boolean을 사용한 제거 방법
    • 참고 동영상 2: Boolean 연산을 통한 블럭 조작

2. 블럭 스폰

블럭 스폰은 게임의 중요한 기능 중 하나로, 일정한 규칙에 따라 새로운 블럭을 생성합니다.

  1. 스폰 위치
    • 블럭을 특정 위치에 스폰합니다. 예를 들어, 게임 월드 내 여러 위치에 스폰 포인트를 배치하고, 일정 시간마다 이 포인트에서 블럭을 스폰합니다.
    • 코드 예시:
      float RandomX = FMath::RandRange(-10.f, 10.f);
      float RandomY = FMath::RandRange(-10.f, 10.f);
      float RandomZ = FMath::RandRange(0.f, 20.f);
      FVector SpawnLocation(RandomX, RandomY, RandomZ);
    • 스폰이 되면 안 되는 위치 판단
      • 특정 조건에 따라 블럭이 스폰되지 않도록 설정합니다. 예를 들어, 다른 블럭이 이미 있는 위치나 특정 장애물이 있는 위치를 피합니다.
    • 이동 방향 판정
      • 블럭이 스폰된 후 이동할 방향을 결정합니다. 이는 물리적 속성이나 게임 로직에 따라 결정될 수 있습니다.

3. 블럭 이동

블럭의 이동은 플레이어의 입력이나 게임의 물리 엔진에 의해 제어됩니다.

  • 로직 작성 필요
    • 블럭이 일정한 경로를 따라 이동하거나 플레이어의 조작에 따라 움직이는 로직을 작성합니다.
    • 코드 예시:
      FVector CurrentLocation = Block->GetActorLocation();
      FVector NewLocation = CurrentLocation + (MovementDirection * DeltaTime * MovementSpeed);
      Block->SetActorLocation(NewLocation);

4. 사용자 입력 처리

사용자의 입력을 처리하여 게임의 주요 기능을 수행합니다.

  1. 프로젝트 세팅 → 입력 → 액션 및 바인드 설정

    • 프로젝트 설정에서 입력 매핑을 설정합니다. 예를 들어, SpaceBar를 누르면 특정 액션을 수행하도록 매핑합니다.
    • 예제:
      PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AMyCharacter::Jump);
  2. C++ 로직 완료 후 BP에서 Key SpaceBar 로직 실행

    • C++에서 주요 로직을 작성한 후, 블루프린트에서 해당 로직을 호출합니다. 예를 들어, SpaceBar를 눌렀을 때 C++ 함수가 호출되도록 설정합니다.
  3. UE5 향상된 입력 사용

    • 입력 액션 및 바인드를 파일로 저장하여 재사용성을 높입니다. 이는 프로젝트의 유연성을 높이고, 다양한 입력 장치를 지원하는 데 유용합니다.

5. UI 만들기

게임의 다양한 상태를 표시하는 UI를 설계합니다.

  1. Intro
    • 게임의 소개 화면을 제작합니다. 게임의 로고, 제목, 시작 버튼 등을 포함합니다.
  2. Loading
    • 게임이 로딩되는 동안 표시되는 화면을 제작합니다. 로딩 바와 힌트 메시지 등을 포함합니다.
  3. In-game
    • 게임 중에 표시되는 UI를 제작합니다. 예를 들어, 현재 층수, 남은 기회, 면적 등을 표시합니다.
    • UI 요소:
      • 층수: 플레이어가 쌓은 블럭의 층수를 표시합니다.
      • 기회 남은 횟수: 남은 기회를 표시합니다. 예를 들어, 블럭을 쌓지 못한 경우 기회가 감소합니다.
      • 면적: 블럭의 면적을 계산하여 점수로 표시합니다. 넓을수록 높은 점수를 부여합니다.
  4. End 화면
    • 게임이 종료되었을 때 표시되는 화면을 제작합니다. 최종 점수와 다시 시작 버튼 등을 포함합니다.

패배 조건

게임에서 플레이어가 패배하는 조건을 설정합니다.

  1. 기회: 3번 (블럭을 못 쌓았을 경우)
    • 플레이어가 블럭을 쌓지 못하는 경우 기회가 줄어듭니다. 3번의 기회를 모두 사용하면 게임이 종료됩니다.

이 기획 초안을 바탕으로 프로젝트를 진행하고자 합니다. 각 작업을 분담하여 효율적으로 작업을 진행하고, 구체적인 로드맵을 작성하여 목표를 달성할 예정입니다. 추가적인 정보나 수정이 필요하면 언제든지 알려주세요!

profile
게임 프로그래머

0개의 댓글