
HexaPuzzle 시스템 구현
github Link : https://github.com/bbno1105/HW_HexaPuzzle
프로젝트 개요
프로젝트 기간 : 5일 ( 2023-03-02 ~ 2023-03-06 )
프로젝트 인원 : 개인 프로젝트
프로젝트 엔진 : Unity
핵심 시스템
1. Tile Setting


육각형의 타일이 배치되기위해 도형의 사이즈를 계산하여 배치합니다.

타일이 생성될 때 ID값을 부여받고 여섯면에 인접한 타일의 ID 값을 기억하고 있습니다.
2. Block
1) 생성 및 이동 상태

게임 데이터에서 블록이 생성될 타일의 ID값을 설정하면 해당 타일에서 블록이 생성됩니다.

블록이 위치한 타일은 주변 타일을 탐색하여 블록이 이동할 수 있는지 확인하고 이동시킵니다.
블록의 이동은 조건과 우선순위를 판단하여 이동시킵니다.
[ 블록 이동의 조건 및 우선순위 ]
1. 블록이 위치한 타일의 바로 아래가 비어있다면 블록을 이동시킵니다.
(블록이 위치한 타일 위에 블록이 존재하지 않는다면)
2. 블록이 위치한 타일의 좌/우 아래가 비어있다면 좌/우 아래로 블록을 이동시킵니다.
2) 매치 상태
블록의 이동이 완료되면 3개 이상 직선으로 매치가 가능한 경우를 탐색합니다.

매치가 가능한 경우 : 매치된 블록을 터뜨리고 빈 타일에 블록을 이동시키기 위해 이동 상태로 전환합니다.
매치가 불가능한 경우 : 플레이어 조작 상태로 전환합니다.
3) 조작 상태

유니티 이벤트 시스템의 IPointerDownHandler, IPointerUpHandler 을 활용하여 클릭한 대상을 판별합니다.

클릭한 대상으로부터 터치 포인터가 이동한 방향벡터값을 활용해 조작 방향을 판단하였습니다.

조작 후 매치가 가능한 경우 : 매치된 블록을 터뜨리고 빈 타일에 블록을 이동시키기 위해 이동 상태로 전환합니다.

조작 후 매치가 불가능한 경우 : 이동한 블록을 다시 되돌리고 조작상태를 유지합니다.
Project Diary
▶ | Date | 분류 | [HexaPuzzle] |
▶ | 3/2 | 프로젝트 생성 | Unity 2020.3.17 프로젝트 생성 |
▶ | 3/2 | 타일 | 헥사 타일맵 생성 |
▶ | 3/2 | 타일 | 타일 ID 추가 및 주변 타일 ID 세팅 |
▶ | 3/2 | 블록 | 블록 떨어짐 구현 (규칙 : 아래 판단 -> (위에 블록 없으면) 좌/우 판단) |
▶ | 3/3 | 플레이어 상태 | 플레이어 상태에 따라 코드가 적용되도록 리펙토링 |
▶ | 3/3 | 매치 | 3개 이상 매치 |
▶ | 3/3 | 데이터 | QuickSheet 연결 및 스테이지 데이터 연결 |
▶ | 3/4 | 조작 | 터치한 블록 판단하기 |
▶ | 3/4 | 블록 이동 | 터치한 블록 이동시키고 판단하기 |
▶ | 3/4 | 블록 연출 | 터지는 애니메이션 연출 추가 |
▶ | 3/5 | 조작 | 플레이어 조작상태 제한 (PLAYSTATE.PLAY 상태일때만 조작가능) |
▶ | 3/5 | 빌드 | 1차 테스트 빌드 세팅 |
▶ | 3/5 | 팽이 | 터질때 주변이 팽이면 영향받도록 (1차 : 깨짐, 2차 : 터짐) |
▶ | 3/5 | 블록 | 블록 오브젝트 풀링 2번되던 오류 수정 |
▶ | 3/6 | UI | 프로토타입용 UI 추가 |
▶ | 3/6 | 팽이 | 팽이 리소스 변경 (동그란거) |
▶ | 3/6 | 사운드 | 사운드컨트롤러 추가 |
▶ | 3/6 | UI | UI 데이터 연결 |
▶ | 3/6 | 사운드 | 사운드 리소스 적용 |
▶ | 3/6 | 클리어 | 클리어, 게임오버 및 재시작 추가 |
▶ | 3/6 | 해상도 대응 | 캔버스 사이즈에 맞춰서 퍼즐이 위치할 수 있도록 수정 |
'Project > StudyProject' 카테고리의 다른 글
Change And Drop (0) | 2023.03.01 |
---|---|
Minimanimo (0) | 2022.12.01 |
This Game is Not Portal Game (0) | 2022.09.06 |
Slime Must Die (0) | 2022.09.06 |