도파민조아 MYPI

도파민조아
접속 : 4423   Lv. 51

Category

Profile

Counter

  • 오늘 : 6 명
  • 전체 : 143489 명
  • Mypi Ver. 0.3.1 β
[Unity Engine] 유니티로 퍼즐드래곤 만들기 - part3 (3) 2014/07/31 PM 10:03
하스스톤 모험모드 개방 + 4시간쓴게 날아감 + 생각보다 어려움 + 모두의마블 함 + 나태해짐 + etc..

로 늦어졌습니다.-_-;

step1. Element 접근

파괴를 하기 위해선 Board에 위치한 각각의 Element를 Coord로 접근할 수 있어야한다.
예를들어 getElement(4,4) 라는 함수를 호출하면 4,4 째 위치한 원소에 접근해야 할 것이다.

여기서 약간 UITable을 집고 넘어가고자 한다.
UITable안에서 각각의 원소를 rep-osition하기전에 가지고 있는 List children을
clear하는 만행(?)을 저지른다. 이후 다시 getChild로 List를 만들고 다시 Sorting한 다음에
배열하는 방식을 쓰고 있다. 왜 이러는지는 모르겠지만 역시나 좀 안좋아 보인다고
엔진을 건드리는 일은 하지말자.

아무튼 이전에 썼던 OnDragOver를 보자


이것을 보면 좌표를 바꾼 후 Rep-osition을 하는 대신 이제 원을 그리며 움직이는 함수를 넣고있다.
하지만 Rep-osition을 안하면 UITable 내부에 있는 children List에는 sorting 되지 않은체
단지 좌표만 바뀌게 되어버린다. 좌표를 바꾼후 List를 Sorting 하려면 다음 코드를 추가하면된다.
board.children.Sort(board.compareCoord);
하지만 단지 두개의 원소가 뒤바뀔뿐인데 소팅까지 하는건 별로 좋아보이지 않는다.
단순히 Swap(a,b)만 하면 될인인데 List에는 Swap함수가 없다.

이미 정의되어 있는 함수에 Swap을 추가하는 방법은 다음과 같다.
이미 copyPDTool 이라는 클래스가 있으니 이 클래스를 다음과 같이 고쳐보자.

static 클래스로 고쳤고 swap이라는 함수를 추가했는데 매게변수로
this라는 키워드도 보인다. 역시 C#에서 확장메서드를 추가하는 방법인데
필자도 그냥 외우고 있는 방법이다.

1.1 추가
여기서 List 을 List로 선언해주면 좀더 범용적으로 쓸 수 있다.
아래와 같이 수정해주면 된다.


이렇게 추가하면

다음과 같은 방식으로 리스트에 있는 원소를 바꿀 수 있다.

이제 당초 목적인 getElement 함수를 만들면 된다.


step 2. 이제 우리는 찾아낼 것이다. 파괴할 Element를 크크큭 흐콰한다.

이제 무엇을 파괴할것인지 찾아내야 한다. 필자가 사용한 알고리즘은 다음과 같다.


0. List ToDestronyList를 선언한다.
1. 아래 방향으로 움직이면서 3개이상 연속된 Element들을 찾아 List에 넣는다.
2. 옆 방향으로 움직이면서 3개이상 연속된 Element들을 찾는다. 여기서 1. 에서 중복된 원소를 넣지 않는다.


DectectionColumn()와 DectectionRow() 함수를 추가했다.

이제 잘 동작되는지 살피기 위해 Label 하나를 추가했고
파괴할 드롭은 검정색으로 변하게 만들었다.



소스 주소 : https://github.com/geniikw/copy-of-puzzleD/

다음번엔 드롭을 파괴하고 내려오는 것까지 올리겠습니다. 12시쯤에 올릴 수 있으면 올립니다.

질문이나 피드백 오류지적 환영합니다.
질문이나 추가사항은 다음 마이피에 추가되어 올라갑니다.

신고

 

이건꿈일거야    친구신청

우와 신기하네요!!! 대단하십니다

太乙眞人    친구신청

모바일 프로그래밍 배울려면 독학 힘들까요? '-';;; 도전해보고싶은 부분이긴 한데

잘자염    친구신청

일단 능력에 따라 다른데 1. 영어가 술술 읽히고 2. 적절한 동기부여가 있으며 3. 프로그래밍을 좀 배운적이 있다면
유튜브에 구현하고 싶은것을 치면 튜토리얼이 나옵니다(ex : unity3d inventory system)
이런거 보시고 따라하면 실력이 금방 들어납니다.
만약 세가지중 하나라도 부족하면 학원을 다니는 걸 추천합니다.
X