개요
공간 분할이란 효율적으로 객체를 찾기 위한 자료구조이다. 대표적으로 쿼드 트리(Quad Tree), 옥트리(Octree) 등이 있으며
여기서는 고정된 공간 분할을 사용한다.
여기서 A라는 객체를 찾는다고 해보자. 지금은 객체가 3개 정도이기 때문에 반복문을 통하면 비교적 빠르게 찾을 수 있지만 객체수가 많아지면 그만큼 찾는데 시간이 오래 걸리기 때문에 비효율적이다. 이때 사용하는 것이 Sector이다.
Sector는 2차원배열로 현재 객체의 위치에 따라서 Sector에 객체를 넣고 빼는 일을 반복한다.
Sector 클래스 전
이 전에는 Client에 Sector 개념이 없었다. Server에서 시야 처리를 하고 그 시야 안에 있는 몬스터에 대한 충돌 체크만 진행을 했었다.
Sector 클래스 후
새롭게 Clinet에 추가한 Sector 클래스이다. 이 클래스는 Gameobject를 상속받는 모든 객체들을 관리하면서
동시에 객체끼리의 충돌체크를 검사한다.
Sector의 인스텐스는 World 클래스에 있으며 playerInputComponent에서 입력된 키값에 따라 함수를 호출하고 false를 반환하면 캐릭터를 이동시킨다.
GameObject를 상속받는 Monster 객체에 대한 충돌(이동, 공격)이 되는 모습이다. 공격과 총돌은 상, 하, 좌, 우 만 가능하며 아직은 무기나 스킬 같은 거를 추가할지 생각을 확실히 하지 못했기 때문에 Distance를 1로 고정해서 진행하였다.
후기
충돌체크 및 이동 체크를 위한 Sector를 Clinet에 추가 구현했다. 충돌 부분이 조금 지저분한 느낌이 나지만 아직 Server 리뉴얼을 시작도 못했기 때문에 추가적으로 무기나 스킬을 구현할 수 있을지 모르겠다.
확실하는 거는 저번에 비해 h/cpp 파일이 매우 증가했다는 점이다. 최대한 파일 간의 종속성을 배제해서 진행하고 있으며 계속해서 그런 방향으로 갈 수 있도록 할 것이다.
리소스: 알피지 만들기 툴 사이트
그 외: 본인
[portfolio] - [리뉴얼] 개요 및 목표(20.07.29 수정)
[portfolio] - [리뉴얼] 1- 중재자 패턴을 이용한 Network Class
[portfolio] - [리뉴얼] 2- 경량 패턴을 이용한 World Class
'portfolio' 카테고리의 다른 글
[리뉴얼] 5- ViewList와 Sector (1) | 2020.11.18 |
---|---|
[리뉴얼] 4- AcceptEx 및 이동 동기화 (0) | 2020.11.02 |
[리뉴얼] 2- 경량 패턴을 이용한 World Class (0) | 2020.07.27 |
[리뉴얼] 1- 중재자 패턴을 이용한 Network Class (0) | 2020.07.19 |
[리뉴얼] 개요 및 목표(20.11.28 깃허브 추가) (0) | 2020.07.09 |