No errors reported

메모리 게임

Windows
MacOS
Linux

CardGame_Board.png

Memory Game 샘플은 간단한 PC/모바일 로직 게임 예제입니다. 별도의 코드 지원 없이 블루프린트 로만 만들어졌습니다.

게임 로직

BP_LogicMem 블루프린트GameMode 클래스에서 파생되었습니다. 바로 Default Pawn, HUDClass, PlayerController, Spectator, GameReplicationInfo 클래스가 설정되는 블루프린트 입니다.

BP_LogicMem 블루프린트 에는 그래프 가 둘 있습니다. EventGraph 에는 게임의 초기 셋업, 게임플레이에 필수인 로직 테스트, 메뉴 버튼으로 돌아가거나 Hint 버튼으로 모든 카드를 표시하는 등의 부가 함수성이 들어 있습니다. FinishGame 은 플레이어의 승패, 플레이어가 얻은 별 수, 필수적인 게임끝 정리 등을 처리합니다.

BP_Counter블루프린트 인터페이스 를 사용해서 BP_LogicMem 에 의해 호출되는데, 표시된 이동 횟수 변경, 남은 이동 횟수 3 회 이하일 때 이동 횟수 글씨 색 변경 등의 작업을 해 줍니다.

카드 처리

BP_DeckMem, BP_CardMem 블루프린트 는 게임에서 카드의 정의 방식과 레이아웃을 관리합니다. BP_DeckMem 의 인스턴스 하나가 게임 레벨에 놓이면, BP_CardMem 스폰을 처리합니다.

BP_DeckMem 에는 카드 덱 생성 및 셔플, 카드 스폰 및 보드상에 배치, Hint 버튼을 눌렀을 때 모든 카드 표시 등의 로직이 들어있습니다. 덱 셔플 부분에 대한 망은 Shuffle 함수에 저장되어 있으며, 이 함수는 새 게임 준비 도중 메인 이벤트 그래프 에서 호출됩니다. 덱 셔플 이후, BP_DeckMem 에서는 카드의 총 갯수에 따라 배치를 달리하여 카드를 스폰합니다. 보드상의 모든 위치에는 인덱스가 있습니다: CardDeckObjects 배열에는 해당 인덱스에서의 BP_CardMem 블루프린트 가 들어있는 반면, CardDeckShuffled 배열은 해당 인덱스에서의 카드 유형에 대한 정보가 들어 있습니다. BP_DeckMemRotate 이벤트는 Hint 버튼이 눌렸을 때 모든 카드를 뒤집습니다.

BP_CardMem 는 각 카드의 그림 정의, 카드 배치와 뒤집기와 제거할 때의 애니메이션 정의, 카드 비교시 사용되는 파티클 이펙트 와 사운드를 설정합니다.

CardGame_ParticleEffects_Right.png

클릭 입력

BP_PlayerControllerMem 블루프린트 는 마우스 인터페이스를 활성화시킵니다. 클릭 이벤트는 활성화시키는 반면, 마우스오버 이벤트는 활성화시키지 않습니다. 클릭 이벤트가 들어있는 블루프린트BP_MenuMem, BP_CardMem, BP_Scoreboard 입니다. 이 Assign OnClicked 노드 는 모두 ReceivedBeginPlay 이벤트를 통해 실행되는데, 이 이벤트는 플레이어가 게임을 시작할 때 한 번 발동되는 것입니다.

Assign OnClicked 노드 는 OnClicked 델리게이트에 묶인 이벤트를 생성합니다. 델리게이트란 상태를 보고하고 그 상태 변화에 따라 이벤트를 발동시키기 위해 블루프린트 컴포넌트에서 사용하는 방식입니다. 예를 들어 게임에서 Hint Button 이 클릭되면, 클릭이 되었다고 보고를 하고, Hint Button 의 OnClicked 델리게이트가 발동되어 배치된 카드 전부를 뒤집게 만드는 노드 시퀀스를 실행합니다.

BlockClick 변수는 뒤집혀 있거나 그 과정에 있는 카드를 클릭하지 못하도록 합니다.

고정 카메라

BP_LogicMem 블루프린트SpectatorPawn 을 디폴트 Pawn Class 로 정의합니다. Memory Game 에 대한 레벨 블루프린트 는 PlayerStart 위치에 SpectatorPawn 를 배치하며, SpectatorPawn 의 프로퍼티를 통해 게임플레이 내내 카메라를 그자리에 고정시킵니다.

메뉴

Memory Game 시작 메뉴는 BP_MenuMem 블루프린트 에 간단한 StaticMeshComponents 를 사용하여 구성되어 있습니다. 문자와 숫자에는 TextRenderComponents 가 사용되며, 게임 창 밖으로 메뉴를 이동시키는 데는 Timeline 이 사용되었습니다.
메뉴를 사용해서 사용할 카드 갯수, 쌍이 갖춰지면 게임을 끝내게 될 검정 카드 쌍을 사용할지 여부에 대한 변수를 설정합니다. 이러한 변수는 BP_LogicMem, BP_DeckMem 블루프린트 에, BPI_Communication 블루프린트 인터페이스 를 통해 전송됩니다.

CardGameMenu.png

BP_Scoreboard 블루프린트StaticMeshComponentsTextRenderComponents 를 조합시켜 게임 종료시 나타나는 요약 메뉴를 만듭니다.

CardGameEndMenu.png