관련 스크립트
헥사게임같은경우
3개의 각 다른 블록이 떨어지므로 각각의 블록에 해당되는 블록마다 재귀함수를 적용해서 호출해줘야됨
1. 3개의 블록 떨어트리고 고정
2. 아래에서부터 차례대로 고정된 블록 주위로 같은 블록이 있는지 검사
3. 같은 블록은 List 에 저장
4. 같은 블록이 3개 이상이면 없애주기
- List 사용시 각각 다른 List 사용
- 중복 제거
CheckMatchHexa 에서 아래에서부터 차례대로 체크를해줌
CheckBlockMatch 함수에서 매치되는 블록 삭제 처리
CheckBlock은 재귀호출로 같은 타입이 있으면 계속해서 호출되고 List 에 저장됨,
Block 스크립트의
SelfDestroy 코루틴 함수에서는 타입을 empty로 변경한후
껏다켰다를 반복 (enabled로()후 마지막으로 _blocks의 이차원 배열에 해당되는값 null로 변경,
그리고 Block 스크립트를 할당하는 게임오브젝트 삭제
동영상 - 재귀함수에 대한 설명
http://youtu.be/p4yJ_JgAPgQ
출처 : http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=21651
여러가지 방법이 있는데요 일단 Tag를 이용하는방법을 설명해 보겠습니다
게임 블럭의 종류대로 TAG를 추가 합니다 태그명은 뭐 알아서 ^^;
저는 편의상 Block0~Block3로 할께요
Grid[x,z] = GameObject.Instantiate(Blocks[index1], new Vector3(x,0,z), Quaternion.identity)as GameObject;
Grid[x,z].tag = "Block" + index1; //이렇게 코드에 추가하신후에
터치된 블록주위를 검사해서 자신의 TAG와 같은 애들이 3개 이상이면 삭제 하시면 되겠습니다
블록을 검사하는 방법에 대해 물으신 거라면
잠깐 생각해보니 리커시브 함수를 써야 될것 같습니다
특정 블럭 즉, 자신을 중심으로 상하좌우 블럭을 조사하는 함수를 만드시고 함수내 상하좌우 블럭 조사할때 다시 해당 함수를 리커시브하게 불러서 또다시 상하좌우를 조사하시면 되겠네요
이때 이미 조사한 블럭은 중복될 수 있기때문에 이미 조사한 블럭은 어딘가에 기록으로 남겨놓아야 중복 조사를 방지 할수 있을겁니다
재귀 함수를 한번도 사용해 보지 않으셨으면 로직을 이해하는데 약간 어려움을 느끼실 것 같은데요
곰곰히 잘 생각해보면 그리 어렵지도 않습니다
일단 작성하신 CheckBlock 함수가 특정 좌표(x,z)를 받고 상하좌우를 검사하는 함수잖아요
일단 return에서 부르는 CheckBlock(x,z)는 주석처리 하시고 (왜냐하면 현재 위치를 또 검사하면 무한으로 계속 부르게 되니까요)
지금 gameObject자체를 비교하고 계신데 tag비교로 바꿔주시고
if(x > 0 && Grid[x,z].gameObject == Grid[x-1,z].gameObject){
// 전역변수 List에 해당 좌표쌍을 저장하는 코드 삽입
CheckBlock(x-1, z);
}
위 처럼 다른 사방에도 해주시면 됩니다
로직을 설명드리자면 특정 블럭 위치(x,z)의 상하좌우를 검사해서
동일한 Tag가 있는 블럭위치(a,b)를 저장할 수 있는 전역변수 C라는 List 변수에 해당 위치를 저장해 주고
또 다시 (x-1, z)블럭위치로 위 함수를 호출 하는것이죠
결과적으로 전역 C변수에는 블럭 주변에 동일한 Tag가 있는 모든 블럭위치를 저장하게 될 겁니다.
그리고 먼저 말씀 드렸다 시피 해당 블럭위치가 이미 저장되어 있는지 검사해서 함수를 호출해야 무한루프에
빠지지 않을 겁니다.
'유니티 > Note' 카테고리의 다른 글
| 안드로이드 스튜디오를 사용시 기존 이클립스 폴더 불러오기. (0) | 2014.06.26 |
|---|---|
| 기본적인 프로그래머.. (0) | 2014.06.22 |
| 유니티 재귀함수의 예(헥사, 캔디팡) -Recursive Methods (0) | 2014.06.05 |
| 유니티 메모리 풀 사용시 주의점 (0) | 2014.06.02 |
| NGUI free 버전 2.7 (0) | 2014.06.01 |
| 유니티 카메라에 따른 해상도 관련 (0) | 2014.05.27 |


