본문 바로가기

미니프로젝트/테트리스

Tetris Falling blocks - 3

블록들이 한줄이 차면 제거해주는 로직을 짜보자

체크하는 펑션은 BP_CheckLine이라는 액터 블루프린트를 만들어 넣어주자.

맨먼저 컴포넌트에 박스를 넣고  BoxExtent를 다음과 같이 길게해주자

이후 10개까지 카피해주고 Z값을 0,50,100, 50씩 증가시킨다. 시작점이 1000인데 이러면 500이상은 체크하지 못할것 같다.

난 50씩 증가시키는게 귀찮아서 로직을 짰다. 사실 박스자체를 Spawn해주고 싶었는데 유ㅠ

CheckLines라는 함수를 만들자.

BoxCollision 컴포넌트를 찾아 오버랩된 액터들을 찾아 변수로 승격시키고 OverlappingActors 배열에 저장한다. OverlappingActors들은 BP_SingleBlocks로 필터링해주자. 안그러면 갯수가 에러가난다 아직 제거안된 BP_FallingBlock들이 카운트된다. 액터들의 개수가  10개면 한줄이 다 찬거다.

한줄이 꽉찾으면 DropAmount를 50 증가시켜주고 꽉찬위치가 CutOffLineZ보다 작다면 현재위치를 CurOffLineZ로 해주고 지울블록위치에 폭발효과를 SpawnEmission 해준다. 그리고 오버랩핑액터를 하나씩 Destroy해준다.

다 지워주면 이제 블록을 DropAmount만큼 내려줘야한다. 지우고 난 나머지 BP_SingeBlock을 찾아서 Z위치를 찾아 CutOffLine보다 큰 것만 아래로 내려준다.

원래 Branch뒤에서 BP_Singleblock위치를 DropAmount만큼 Z위치를 내려주면 되는데 천천히 내려가는 효과를 만들기위해 BP_SingleBlock에  TargetZ이라는 변수를 만들고 실시간으로 TargetZ를 조정한다.

BP_SingleBlock으로 이동해서 EventBeginPlay뒤에 GetActorLocation z값을 변수로 승격해서 TargetZ에 저장한다.

BP_SingleBlock과 TargetZ의 값이 차이가 있다면 Lerp를 이용해 조금씩 변화시킨다 alpha값에 의해 속도가 정해진다.