VR 주차연습 시뮬레이터 - 맵 커스터마이징 기능 제작 1
사용자가 원하는 환경에서 주차연습을 할 수 있도록 하기 위해 맵을 직접 만드는 기능을 제작하기로 했다.
우선 적당한 크기의 플레인을 배치하고 카메라에서 마우스 커서가 가리키는 쪽으로 Ray를 쏴서 플레인과 충돌하는 지점의 좌표를 정수로 변환해서 나오는 정수 좌표를 이용해서 2차원 배열로 맵을 관리하도록 설계하였다.
설치해야하는 오브젝트와 그 오브젝트의 미리보기를 위한 초록색 머테리얼을 적용한 오브젝트를 프리팹으로 저장해서 사용하였다.
클릭을 안했을 경우 : 미리보기 오브젝트를 활성화시켜서 Ray와 플레인이 충돌한 좌표(정수로 변환)에 미리보기 오브젝트를 위치시킨다.
왼쪽 클릭을 했을 경우 : Ray와 플레인이 충돌한 좌표(정수로 변환)에 이미 오브젝트가 배치되어있으면 입력을 무시하고, 오브젝트가 배치되어있지 않으면 오브젝트를 배치시키고 맵을 관리하는 2차원 배열을 알맞은 값으로 채워준다.
오른쪽 클릭을 했을 경우 : Ray와 플레인이 충돌한 좌표(정수로 변환)에 오브젝트가 배치되어있으면 해당 오브젝트를 Destroy 시켜주고 2차원 배열의 현재 좌표의 값을 초기 상태로 변경시킨다. 충돌한 좌표에 오브젝트가 없다면 무시한다.
수정/추가 해야할 사항:
수정:
1. 현재 광선의 LayerMask가 플레인에만 충돌되도록 설정해놔서 클릭했을때 오브젝트가 아닌 플레인에 광선을 쏘기 때문에 오른쪽 클릭의 경우 높이가 높은 오브젝트의 경우에는 오브젝트의 윗부분을 쏘면 그곳을 관통해서 플레인과 충돌했을 때 오브젝트의 좌표와 충돌 좌표가 다른 경우가 발생할 수 있기 때문에 오른쪽 클릭을 할때는 LayerMask를 오브젝트에 충돌할 수 있도록 수정해야 할 듯 하다.
2. 맵을 관리하는 2차원 배열의 크기가 100x100으로 하드코딩되어있는데 플레인의 크기에 맞춰지도록 수정해야 할 듯 하다.
추가 :
1. 카메라 줌인/줌아웃, 이동
2. 맵 정보들을 메모리에 저장하고있는 MapManager 클래스
3. 만든 맵을 프로그램을 껐다가 켰을 때도 불러올 수 있도록 json파일로 변환해서 저장하는 기능
(맵 제작 -> 맵 정보를 json파일로 파싱해서 저장, MapManager에도 저장)
(프로그램 시작 -> json 파일을 통해 맵 정보를 불러와서 MapManager 싱글톤 클래스에 저장)
4. 배치할 수 있는 여러가지 에셋들
5. 무엇을 배치할지 선택할 수 있는 UI
6. 출발지점/도착지점
또 머가있징