수정한 내용
구조물에 스폰 포인트 생성되는 문제
- 문제
주황색 경계선이 있는 구조물의 레이어가 Unwalkable인데도 그 위치에 스폰 포인트가 생성되는 문제가 생겼다.
- 원인
공중에 셀에서 지상으로 레이캐스트를 쐈을 때 Ground
레이어라면 스폰 포인트를 생성하도록 했지만, 무슨 이유에선지 다른 레이어를 가진 오브젝트도 감지를 해버려서 위 사진 같은 결과가 나왔다.
- 해결
레이어 체크에서 Ground레이어에 부딪혔을 경우에만 스폰 포인트로 설정
- 각 셀에서 지상으로 레이캐스트 발사
- 닿은 곳에서
Physics.OverlapSphere
로 닿은 모든 오브젝트를 충돌체 배열에 대입
- 배열에 있는 게임 오브젝트 중에
Ground
레이어 외에 다른 레이어가 존재하면 건너뛰기
Ground
만 존재하면 스폰 포인트로 추가
public void DetectSpawnPoint()
{
_groundTempPoint.Clear();
_groundSpawnPoints.Clear();
int groundLayer = LayerMask.GetMask("Ground");
int allLayers = LayerMask.GetMask("Ground", "Wall", "Unwalkable");
RaycastHit hit;
foreach (Vector3 cell in _groundCell)
{
if (Physics.Raycast(cell, Vector3.down, out hit, 41f, groundLayer))
{
Collider[] hitColliders = Physics.OverlapSphere(hit.point, cellRadius, allLayers);
bool onlyGround = true;
foreach (var hitCollider in hitColliders)
{
if (hitCollider.gameObject.layer != LayerMask.NameToLayer("Ground"))
{
onlyGround = false;
break;
}
}
if (onlyGround)
{
_groundTempPoint.Add(hit.point + Vector3.up * 3);
}
}
}
_groundSpawnPoints = new Queue<Vector3>(_groundTempPoint);
}
- 이제 위쪽 사진과는 다르게 땅 혹은 Ground 레이어를 가진 곳에만 스폰 포인트가 생성된다.