[Unity] 빌딩 시스템 만들기 #0. 구상
[시스템 구성 전]
1. 한글로된 빌딩 snap 기능이 없어서 검색을 해보다가 connector를 사용하여 raycast를 사용한 빌딩 시스템을 발견.
2. 현재 프로젝트에는 위의 방법으로 하는것은 어렵다고 판단.
3. Snap 구현은 비슷하게 구현하되, 많은 부분의 로직을 재구성 하였다.
[ 빌딩 Snap 로직 ]
1. 플레이어가 raycast 한다.
2. 플레이어가 raycast하는 layer은 현재 건축하고 있는 블럭이 무엇인지에 따라 바뀐다 (ex. 바닥을 설치하고 있으면 raycast할 layer은 floorConnectorLayer)
3. 현재 블럭의 위치는 Raycast hit 위치가 된다. ⬅️ Snap의 포인트
4. 우클릭시 설치한다.
4-1. 블럭이 올바른 위치에 있는가 ?
4-2. 블럭이 다른 오브젝트와 충돌 했는가 ?
[ Conenctor 로직 1차]
1. 블럭 오브젝트는 하위에 가능한 모든 커넥터들을 오브젝트로 가진다.
1-1. 설치 시 커넥터와 '설치가 완료된 블럭'이랑 겹치면, 해당 커넥터는 Destory 한다.
[ Conenctor 로직 2차 ]
1. 1차에서 오브젝트로 가지고 있지 말고 Vector3 위치값으로 가지고 있으면 되지 않을까?
2. List< Tuple< ConnectorType , Vector3 > > 라는 리스트를 선언 후
2-1. 커넥터가 어떤 타입인지 ( = 어떤 레이어를 가지게 될 건지 )
2-2. 블럭 기준 어느 위치에 존재하는지에 대한 위치값 을 저장하였다.
[Connector 최종 로직]
<블럭 설치>
1. 블럭이 설치될 때 블럭 type에 해당하는 ConnectorGroup안의 List<Tuple<ConnectorType , Vector3>> 리스트의 위치값을 Physics.OverlapSphere 로 검사한다.
2. 건축이 완료된 블럭이 검사되면 ? or 이미 커넥터가 검사되면? ➡️ 커넥터를 생성한다.
3. 그 외 아무것도 검사되지 않으면 ? ➡️ 커넥터를 생성한다.
<블럭 삭제>
1. 삭제할 블럭 type에 해당하는 ConnectorGroup안의 List<Tuple<ConnectorType , Vector3>> 리스트의 위치값을 Physics.OverlapSphere 로 검사한다.
2. Connector Layer가 검사되면 ? ➡️ List에 추가한다.
> 해당 커넥터를 사용하는 블럭이 있다면 삭제하지 않고, 사용하는 블럭이 없다면 삭제한다.
3. List에 추가된 커넥터가 하나의 블럭이라 가정하고, 블럭 type에 해당하는 ConnectorGroup안의 List<tuple> 리스트의 위치값을 Physics.OverlapSphere 로 검사한다.
3-1. 해당 위치에 '건축이 완료된 블럭' 이 검사되면 ? ➡️ 커넥터는 삭제하지 않는다
3-2. 해당 위치에 '건축이 완료된 블럭' 이 검사되지 않으면 ? ➡️ 커넥터 삭제
[다음편]
https://youcheachae.tistory.com/6
[Unity] 빌딩 시스템 만들기 #1. UI , Connector Data
[이전 편]https://youcheachae.tistory.com/5#comment21549004 [Unity] 빌딩 시스템 만들기 #0. 구상[시스템 구성 전]1. 한글로된 빌딩 snap 기능이 없어서 검색을 해보다가 connector를 사용하여 raycast를 사용한 빌딩
youcheachae.tistory.com
https://github.com/churush912837465
churush912837465 - Overview
churush912837465 has 4 repositories available. Follow their code on GitHub.
github.com