이상한 곳에 스폰이 돼서 스폰 지점 탐지 중
다른 맵이 소환됐을 때에도 노란 포인트가 그대로 쓰이는 것을 확인
공중에 떠있는 노란 점이 문제인 것임
다른 맵에서 찍힌 스폰 지점이 사라지지 않음
public void DetectSpawnPoint() // 중복 없는 스폰 포인트 탐지
{
// 기존 포인트 지우기 작업
_groundTempPoint.Clear();
_rooftopTempPoint.Clear();
_groundSpawnPoints.Clear();
_rooftopSpawnPoints.Clear();
RaycastHit hit;
foreach (Vector3 cell in _groundCell)
{
if (Physics.Raycast(cell, Vector3.down, out hit, 10f))
_groundTempPoint.Add(hit.point);
}
_groundSpawnPoints = new List<Vector3>(_groundTempPoint);
foreach (Vector3 cell in _rooftopCell)
{
if (Physics.Raycast(cell, Vector3.down, out hit, _rooftopDetectDistance))
_rooftopTempPoint.Add(hit.point);
}
_rooftopSpawnPoints = new List<Vector3>(_rooftopTempPoint);
}
기존 스폰 포인트 전부 비워줌으로 해결했음.
스테이트 머신에 reset 함수 만듦
왜 만들었느냐. 팀원이 만든 오브젝트 풀을 사용하기 위함임.
여느 오브젝트 풀과 마찬가지로 Active상태로 관리하기 때문에 초기화의 과정을 넣어주었다.
엔티티 OnEnable에서 호출된다.
네비매쉬 빌드 오류가 생겼다.
다양한 종류(레이어)의 구조물이 있고, 원하는 종류만 네비 매쉬 빌드를 해야 했다.
인스펙터에서 고치는 것은 쉽지만 코드 상으로도 가능할 것이라고 생각해서 검색 후 방법을 찾아냈다.
레이어 마스크를 비트 연산으로 합친 후에 NavMeshSurface의 LayerMask를 설정해주는 방법이다.
NavMeshSurface navMeshSurface;
private int _groundLayer;
private int _unwalkableLayer;
private int combinedLayerMask;
private void Awake()
{
GetOrAddComponent(out navMeshSurface);
_groundLayer = LayerMask.NameToLayer("Ground");
_unwalkableLayer = LayerMask.NameToLayer("Unwalkable");
combinedLayerMask = (1 << _groundLayer) | (1 << _unwalkableLayer);
}
이렇게 적용을 하면 Ground
레이어와 Unwalkable
레이어를 가진 대상만 빌드 연산에 껴준다.