
영상을 보고 건축 시스템 기초를 만들게 되었다!
영상에서는 다음편도 기대해달라고 했는데 1년전 영상에 더이상 새로운 영상이 없다면 더 없는거겠지....

먼저 바닥으로 사용할 오브젝트
적당한 크기의 큐브를 만들어주고 각 끝 면에 3D 오브젝트 구체를 만들어 구체 오브젝트를 커넥터로 사용

영상에서 설명을 해주는데.. 해석을 해야해서 아직 완전히 이해는 못한상태
public class Connector : MonoBehaviour
{
public ConnectorPosition connectorPosition;
public SelectedBuildType connectorParentType;
[HideInInspector] public bool isConnectedToFloor = false;
[HideInInspector] public bool isConnectedToWall = false;
[HideInInspector] public bool canConnectTo = true;
[SerializeField] private bool canConnectToFloor = true;
[SerializeField] private bool canConnectToWall = true;
private void OnDrawGizmos()
{
// 빨강 - 어디어도 설치 불가, 파랑 - 벽에만 설치 가능, 초록 - 바닥 벽 둘다 설치 가능, 노랑 - 바닥에만 설치 가능
Gizmos.color = isConnectedToFloor ? (isConnectedToWall ? Color.red : Color.blue) : (!isConnectedToWall ? Color.green : Color.yellow);
Gizmos.DrawWireSphere(transform.position, transform.lossyScale.x / 2f);
}
public void UpdateConnectors(bool rootCall = false)
{
// 자기 위치를 중심으로 일정 반경 내에 있는 모든 Collider 검색
Collider[] colliders = Physics.OverlapSphere(transform.position, transform.lossyScale.x / 2f);
// 연결 상태 초기화 (연결 불가 상태로 설정)
isConnectedToFloor = !canConnectToFloor;
isConnectedToWall = !canConnectToWall;
foreach (Collider collider in colliders)
{
// 자기 자신은 무시
if (collider.GetInstanceID() == GetComponent<Collider>().GetInstanceID())
{
continue;
}
if (!collider.gameObject.activeInHierarchy)
{
continue;
}
// 같은 레이어의 오브젝트만 연결 대상으로 삼음
if (collider.gameObject.layer == gameObject.layer)
{
// 해당 오브젝트에서 Connector 컴포넌트 가져오기
Connector foundConnector = collider.GetComponent<Connector>();
// 주변 오브젝트가 Floor(바닥) 타입이면, 바닥 연결됨으로 설정
if (foundConnector.connectorParentType == SelectedBuildType.Floor)
isConnectedToFloor = true;
// 주변 오브젝트가 Wall(벽) 타입이면, 벽 연결됨으로 설정
if (foundConnector.connectorParentType == SelectedBuildType.Wall)
isConnectedToWall = true;
// rootCall 옵션이 true면, 인접 오브젝트의 연결 상태도 재귀적으로 갱신
if (rootCall)
foundConnector.UpdateConnectors();
}
}
// 일단 연결 가능 상태로 설정
canConnectTo = true;
// 바닥과 벽에 모두 연결되어 있으면 연결 불가로 설정
if (isConnectedToFloor && isConnectedToWall)
canConnectTo = false;
}
}
[System.Serializable]
public enum ConnectorPosition
{
Left,
Right,
Top,
Bottom
}
그다음 빌드 매니저
음 사용한 코드를 그대로 복붙하기엔 너무 많다..
건축 시스템을 만들면서 배우게 된 몇가지

따라하면서 신기했는데 내일은 가구를 직접 깍아보자!