2 분 소요

Unreal Portfolio

대전 액션 게임의 문제에 새로운 방안을 제시하기 위해 보드게임과 격투 게임을 혼합시킨 게임입니다.

  • 엔진 : Unreal Engine 4 (4.25.4 버전)
  • 에디터 : Microsoft Visual Studio Community 2019 (16.7.3 버전)
  • 제작기간 : 2022.01.02 ~ 개발중
  • 개발규모 : 1인개발

데모 영상

Youtube

썸내일

기술 설명서

보드 게임 턴 바꾸는 기능 구현

  • 보드 칸을 이동하는 기능은 구현했지만, 턴을 바꿔서 다음 레벨로 이동하는 기능에 어려움을 느꼈습니다. 그러다가 언리얼에서 턴제 게임 튜토리얼을 발견했고, 턴제 게임의 방식을 사용하기로 했습니다.

TurnChange3

BP_BoardBase

  • CombatComponent를 가지고 있다.

CombatComponent

  • BeginBattle(): TurnTime 이후 RequestTurn()을 호출하는 함수
  • RequestTurn(): 자신을 가지고 있는 BP_BoardBase를 GameMode의 TurnRequest에 전달하는 함수
  • StartUnitTurn(): 턴을 받았다는 의미
  • EndUnitTurn(): 턴이 끝났다는 의미, TurnEnded 이벤트 디스패처를 호출한다.

BattleGameMode

  • TurnRequest(): 턴을 받고 StartTurn을 호출하는 함수
  • StartTurn(): 턴인 Unit의 CombatComponent에 있는 StartUnitTurn()을 호출하고, ReadyNextTurn()을 TurnEnded의 이벤트 목록에 바인딩한다.
  • ReadyNextTurn(): 다음 턴을 넘겨줄 수 있는지 없는지 판단하고, 없으면 다음 레벨로 이동 명령을 한다.

RequestTurn Image

  • RequestTurn 함수가 GameMode의 TurnRequest를 호출한다.

TurnRequest Image

  • TurnOrder에 Unit을 넣고, StartTurn을 호출한다.

StartTurn Image1

  • TurnOrder의 0번째 Unit이 유효하다면 CombatComponent의 StartUnitTurn을 호출한다.

EndUnitTurn Image

  • StartUnitTurn이 진행된 후 EndUnitTurn을 호출해서 TurnEnded 이벤트 디스패처를 호출한다.

이벤트 바인딩 ReadyNextTurn

  • TurnEnded의 이벤트 목록에 있는 ReadyNextTurn이 호출되고, TurnEnded를 호출한 Unit을 TurnOrder 목록에서 제거한다.

ReadyNextTurn Image

  • TurnOrder의 0번째 Unit이 유효하면 StartTurn을 호출하고, 유효하지 않으면 전원 턴 종료로 판단한다.

참고 자료