TIL 0411 최종 프로젝트 - 14 / 유닛 스폰 문제

강성원·2024년 4월 14일
0

TIL 오늘 배운 것

목록 보기
60/69

스폰 포인트 잔재 현상


이상한 곳에 스폰이 돼서 스폰 지점 탐지 중

다른 맵이 소환됐을 때에도 노란 포인트가 그대로 쓰이는 것을 확인
공중에 떠있는 노란 점이 문제인 것임
다른 맵에서 찍힌 스폰 지점이 사라지지 않음

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레이어를 가진 대상만 빌드 연산에 껴준다.

profile
개발은삼순이발

0개의 댓글