여기까지 만드는 데도 많은 문제에 봉착했었다. 애초에 유니티 초보이기 때문에 헤메는 부분도 많았고.

지금까지 구현한 기능은 아래와 같다.
1. 블록 인스턴스 만들기 : Instantiate를 통하여 Prefab으로 지정되어 있는 각 블록 종류들을 랜덤 함수로 선택하여 인스턴트화 시켰다.

2. 블록 회전 : 처음에는 rotate에서 90도를 줬지만, 회전 중 오브젝트 충돌에 대한 처리가 전혀 되지 않았기 때문에 rotation으로 4가지 회전 케이스를 적용시켜 회전시킨다. 회전시 충돌 문제는 블록 종류별로 따로 처리를 해주는 방식으로 했다.(여러가지 방식을 생각해 봤지만, 다들 너무 복잡하고 구현도 힘들어서 손을 놓았다. 흑흑..) 왼쪽 오른쪽 충돌 탐지를 통해 충돌이 감지될 시 회전시킨다.(case by case로 회전)

3. 블록 이동 : Coroutine을 사용해서 시간당 한칸씩 밑으로 이동하도록 구현하였다. downArrow key를 누를 시 속도를 빠르게 한다.

4. 블록의 착지 : 밑에 오브젝트가 있는지 RayCast를 통해 확인 후 이동을 멈추었다.

5. 현재 블록의 왼쪽 오른쪽 탐지 : 처음에는 여러가지 기능을 사용해보기 위해서 rigidbody를 통한 trigger을 사용해보려고 했지만, 완전 꼬여서 다 지우고 다시 코딩. raycast를 통해서 아주 쉽게 구현해 버렸다. 제길.

6. 블록 삭제 : 한줄이 될 시 블록을 삭제한다. 이것도 raycast로 구현했는데, 조금의 문제가 있다. 아래에 좀 더 자세히.




현재 남은 문제점을 언급하자면,

1. I형 블록이 벽과 충돌하지 않고 있을 시에도 회전시 다른 오브젝트와 겹치는 문제가 발생한다. 좀 더 생각이 필요..

2. 블록 인스턴트 오브젝트가 만들어질 때 모든 line에 raycastall을 통해서 한줄이 완성된 줄을 체크하는 방식인데, 가끔 raycastall이 체크를 하지 못하는 상황이 발생한다. 다음에 다시 체크할 때는 문제없이 체크를 하는데 가끔 체크를 하지 못해서 적절한 시기에 줄을 삭제하지 못하는 경우가 생긴다.. 지금 가장 큰 문제.

3. 블록 인스턴트가 생기는 위치를 지정해 두었는데 그 위치까지 블록이 쌓이면 블록들이 충돌 체크로 서로를 감지해서 그 위치에 블록들이 무한대로 생겨난다. 이건 아마 쉽게 처리가 가능할 것 같다.

4. spacebar를 통한 빠른 배치.(속도를 정말 빠르게 하면 되지 않을까?.. 안되면 다른 방법을 생각해보자.)

기본적인 것들은 거의 구현되어 간다. raycast가 그렇게 확실히 충돌을 체크하는 건 아닌 것 같은 기분이 드는게, 오른쪽 왼쪽 체크 후 회전 기능도 가끔 씹혀서 벽과 겹쳐지는 상황이 발생한다. 뭐, 좀 더 찬찬히 살펴보자. 이렇게 정리하고 보니 문제점이 아직 꽤 남았구나…. 파이팅.