블록들이 한줄이 차면 제거해주는 로직을 짜보자
체크하는 펑션은 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값에 의해 속도가 정해진다.
'미니프로젝트 > 테트리스' 카테고리의 다른 글
언리얼 테트리스 Falling Block 2 (1) | 2024.05.13 |
---|---|
테트리스 블록만들기 FallingBlock1 (0) | 2024.05.01 |