본문 바로가기

미니프로젝트/테트리스

언리얼 테트리스 Falling Block 2

1에서는 Construction Script에서 모양을 만들었다.

EventGraph에서는 게임시 떨어지고 재생성되는 로직을 만들겠다.

우선 BP_SingleBlock이라는 액터 블루프린트를 먼저 만들자.

 

이벤트그래프에 색을 지정하는 변수 BlockColor를 LinearColor로 만들고 다음과 같이 만든다. 변수는 다른 Spawn시 사용할수 있게 Expose on Spawn을 체크해준다. StaticMesh Component를 선택하고 Collision Presets를 blockAll로 한다.이미 만들 FallingBlock의 Collision은 WorldDynamic과는 다르다.

 

이제  BP_FallingBlock으로 가자.

BeginEvent에 SetTimer를 하나 만들어주고 Time을 끌어 변수로 만들고 컴파일후 0.5로 설정해준다. 땅에 떨어지면 타이머를 지울수 있게 Return Value를 변수로 만들어준다. CustomEvent를 만들어 연결해준다.

CustomEvent를 DropBlock으로 0.5초마다 한칸씩 떨어트려주는 기능이다.ShouldDrop이라는 Bool변수를 만들어 Set해주고 DefaultSceneRoot의 자식들(블록)을 For Each 문으로 순환하면서 바닥이나 다른 블록과 충돌하는지 검사한다. 충돌검사 대상은 makeArray안의 WorldStatic이다. 충돌검사는 블록의 한칸 아래칸이다. 블록위치에서 -50까지이다 블록자신은 BlockDynamic이고 검사는  WorldStatic이다 바닥만 검사한다. 그럼 쌓여있는 블록을 체크 못하는데 바닥에 떨어진 블록은 지우고 SingleBlock로 다시 배치해준다

FallingBlock의 StaticMesh의 위치아래를 LineTrace를 이용해 검사하고 콜리전이 있다면 ShouldDrop변수를  disable한다. DoOnce를 사용하는 이유는 잘모르겠다.이후 타이머를 삭제해준다.

ForEachLoop를 마친경우 ShouldDrop을 검사해 참일 경우 AddActorLocalOffset을 이용해 한칸 떨어트려주고

아닐경우 컴포넌트의 위치에 BP_SingleBlock을 배치시켜주고 (0,0,1000) 위치에 BP_FallingBlock을 만들어주고, 자신을 Destroy해준다.

 

'미니프로젝트 > 테트리스' 카테고리의 다른 글

Tetris Falling blocks - 3  (0) 2024.05.13
테트리스 블록만들기 FallingBlock1  (0) 2024.05.01