바탕화면

[Unity 블록 프로젝트] 이중배열로 마인크래프트처럼 블록 생성하기 (1번째) 본문

Unity/프로젝트

[Unity 블록 프로젝트] 이중배열로 마인크래프트처럼 블록 생성하기 (1번째)

Vrowdice 2022. 1. 12. 13:17

코드의 흐름대로 설명하겠습니다.

블록을 직접적으로 생성하는 부분은 마지막에 있습니다.


1. 초기 세팅

초기 셋팅

초기 세팅은 플레이어가 다른 블록을 직접 생성하기 위해 존재하는 초기 블록들을 생성하고 초기화하는 부분입니다.

 

블록이 어디에 존재하는지 알려주는 데이터는 이중배열을 사용했는데 이중배열 첫 번째 인덱스는 로컬 좌표의 X축 위치를 나타내고, 두 번째 인덱스는 로컬 좌포의 Z축 위치를 나타냅니다.

 

그리고 만약 (0, 0, 0)의 좌표부터 초기 블록을 생성하게 되면 이중배열이기 때문에 마이너스를 사용할 수 없어 플레이어는 X축은 0 이상, Z축도 0 이상의 위치에는 블록을 생성할 수 없게 되어 게임의 완성도가 떨어질 수 있습니다.

그렇기 때문에 초기 블록은 블록이 생성될 수 있는 최소 X축과 최대 X축 중간, 최소 Z축과 최대 Z축의 중간인 정중앙에 생성되게 하는데(물론 플레이어도 정중앙에 생성됩니다.) 이를 각 축의 최소 최댓값의 중간값을 기반으로 구하여 생성할 모든 X, Z 위치를 구해 배열에 넣습니다.

 

그 배열을 이중 for문으로 돌려서 모두 생성해 주면 초기 블록 생성이 끝납니다.


2. 플레이어의 블록 생성을 위한 블록 관리 부분

블럭 관리

이 함수는 X축 좌표와 Z축 좌표, 그리고 블록 인덱스를 독립 변수로 넣으면 해당 블록이 위치에 생성이 되는 함수입니다.

0은 블록을 생성하기 위한 블록의 인덱스이고 1인덱스 이상은 모두 실체가 있는 완전한 블록입니다.

 

블록을 생성하기 이전에 블록이 생성하는 주변에 블록을 생성할 수 있게 어떠한 장치를 해둬야 합니다.

본인은 이를 블록을 생성하기 위한 블록을 같이 생성함으로써 해결했습니다.

보시면 블록을 독립 변수의 좌표에 생성하고 그 주변에도 블록을 생성하기 위한 블록을 생성하는 것을 볼 수 있습니다.

 

블록 생성을 강제적으로 하지 않는 이상 이 함수를 거처 블록 생성을 하게 됩니다.


3. 직접적인 블럭 생성 부분

블록 생성

블록의 집적적인 생성을 담당하는 부분입니다.

만약 블록 인덱스가 0이고 그 자리에 인덱스가 1 이상인 다른 블록이 있다면 리턴합니다.

그리고 인덱스가 1 이상일 경우 자리에 있던 블록을 삭제합니다.

블록을 Instantiate로 생성하고 독립 변수로 들어온 위치로 블록의 위치를 옮기고 생성한 블록을 블록 데이터에 기록합니다.

 

블록을 생성하는 부분은 생각보다 특별한 것은 없습니다. 

블록을 생성하고 블록이 겹치면 삭제하며 해당 블록을 데이터에 넣는 간단한 구조입니다.


4. 실행 결과


지금까지 원하는 곳에 블럭을 생성하는 알고리즘이었습니다.

감사합니다.

 

다음에는 블록을 삭제하고 파괴하는 것을 진행하겠습니다.