본문 바로가기

Unity/Unity 스파르타

10주차 - 개인 심화 3D(Navigation, 이동 경로 시각화 하기)

728x90

1. 플레이어 이동 Navigation으로 로직 바꾸기

2. 이동 경로 시각화하기

 


1. 플레이어 이동 Navigation으로 로직 바꾸기

마우스 클릭으로 목표지점으로 이동만 하는 단순 로직은 중간에 장애물을 만나면 장애물을 피해 목표위치에 도달할 수 없음으로, 알고리즘을 통한 최단경로를 찾는 걸로 로직을 수정해 줘야 했습니다. 일일이 A* 알고리즘을 구현할 필요없이 이미 Navigation에 구현되어 있음으로 이를 사용해 플레이어의 이동 로직을 수정해 줍니다.

 

2. 이동 경로 시각화하기

이동 경로는 LineRenderer을 통해 그려줄 것 입니다.

NavMeshAgent 의 path.corners 를 사용해 캐릭터의 이동경로를 배열로 받아와 이를 사용해 이동경로를 그려줍니다.

 

플레이어가 움직일 경우  FixedUpdate 에서 계속 해서 업데이트 해주기 때문에 플레이어가 움직이는 로직에 UpdateLineRenderer을 같이 실행해 주도록 합니다

NavMeshAgent에서 현재위치에서 목표지점까지 계속해서 UpdateLineRenderer 통해 LineRenderer을 업데이트 시켜주면 경로가 플레이어 위치에서 목표위치로 업데이트 됩니다.

    Vector3[] GetNavPath()
    {
        Vector3[] paths = navMeshAgent.path.corners;
        
        return paths;
    }
    void UpdateLineRenderer(Vector3[] paths)
    {
        lineRenderer.enabled = true;
        lineRenderer.positionCount = paths.Length;
        for (int i = 0; i < paths.Length; i++)
        {
            lineRenderer.SetPosition(i, paths[i]);
        }

    }

목표 위치는 클릭 할때 마다 바뀜으로 목표위치를 나타내는 표식의 경우 목표 위치가 바뀔 경우 기존에 목표위치를 보여주던 표식을 지워주고 새로운 위치에 표식을 만들어줘야 하는데, 반복해서 Destroy 하기에는 너무 비효율 적이라, 풀링으로 딱 하나의 오브젝트만 만들어서 재활용 해주도록 합니다.

728x90