주말에 작업했던 NavMeshSurface에 대해 튜터님께 질문하고 정리를 했다.
트러블 슈팅
1. NavMeshSurface
적이 움직일 때 마다 주변 지형을 Bake하기 위해 코드를 작성했는데 작동하지 않았다. 주변 지형 외 맵 전체가 Bake 되는 버그가 있었는데 튜터님께 질문한 결과, 내가 사용하는 유니티 버전은 기본적으로 고급 NavMesh가 적용되어 있기 때문에 깃허브에서 추가적으로 고급 NavMesh 파일을 추가할 필요가 없었다. 그래서 게임 시작 시, Bake가 중복해서 실행되기 때문에 오류가 생겼다.
using System.Collections;
using System.Collections.Generic;
using Unity.AI.Navigation;
using UnityEngine;
using UnityEngine.AI;
public class NavMeshSurfaceController : MonoBehaviour
{
public NavMeshSurface _navMeshSurface;
public void CreateMesh()
{
Debug.Log("CreateMesh 실행!");
_navMeshSurface.size = new Vector3(3f, 3f, 3f);
_navMeshSurface.BuildNavMesh();
}
}
코드는 위와 같이 UnityEngine.AI; 외에 Unity.AI.Navigation;을 추가하면 된다.
그리고 위와 같이 적이 Player를 쫒아가지 못하는 버그도 발생했는데, 이 부분은 간단히 Pivot 설정이 문제가 있었다.
이 처럼 Center가 (0, 2, 0)으로 설정되어 있기 때문에 범위가 바닥을 접촉하지 못해 Bake가 되지 않았다.
이렇게 수정해서 실행은 잘된다. 하지만 캐릭터가 무수히 떨리는 버그가 있었다. 이 부분은 bake 자체가 엄청 무거운 기능인데 이 기능을 update문에서 매 프레임 작동하기 때문에 생기는 것이라고 튜터님께서 말씀하셨다. 만약 이렇게 구현을 할 것이라면 update문이 아니라 코루틴을 사용해야 한다고 했다. 사실 움직이는 배 위에서 전투를 구현하기 위해 이렇게 실시간 bake를 사용하는 것인데 적이 한명이 아니라 여러명이기 때문에 성능에 아주 안좋다고 판단이 된다. 그래서 배 위에서는 NavMeshAgent를 사용하지 않고, 기존에 구현했던 일반적인 Target 방향으로 이동하는 것으로 구현하기로 했다. 어찌됐건, 해결완료!
회고
주말에 작업하려고 했던 NavMeshSurface에 대해서 튜터님께 질문을 했다. 결론적으로 강의를 보고 잘 따라하긴 했지만 유니티 버전이 달라서 NavMesh가 두번 생성되어서 bake가 두번 실행된 것이다. 그리고 bake에 대해서 추가적인 설명을 들었는데 원래 구현하려고 했던 것처럼 update문에 bake를 계속하게 되면 게임에 큰 부담이 갈 것이고, 무엇보다 움직이는 배 위에서는 이동 자체가 어색할 것이라고 하셨다. 결국에는 배 위에서는 AI 기능을 사용하지 않고 처음 작업했던 방식으로 사용하기로 했다. 그리고 오늘 팀원들과 깃허브 머지를 하는 과정에서 내가 몇일 간 작업했던 내용이 모두 사라지는 일이 생겼다.. 주위 조에서 한번씩 들리던 일을 내가 직접 겪으니 많이 당황했고, 튜터님께 질문을 했는데 그땐 이미 되돌리기엔 늦었었다. 아마도 팀원이 병합하는 과정에서 내가 작업했던 내용이 없어지고 그 내용을 main에 올렸던 것을 내가 다시 Pull 한 것 같다. 정확한 이유는 알 수 없지만 이제부터 팀원들과 기능이 추가될때 마다 바로바로 Push를 하기로 했고, 즉시 다른 팀원들도 Pull을 해서 최대한 최신 작업분에서 각자 작업을 하는 것으로 결정했다. 작업 했던 내용들을 그래도 정리를 잘 해놔서 금방 복구는 할 수 있었지만 대신 오늘 다른 추가 작업을 하지 못했다. 내일은 추가 기능 구현을 목표로 열심히 해야겠다!
'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글
Unity_2기 12주차 (230124) (1) | 2024.01.24 |
---|---|
Unity_2기 12주차 (230123) (1) | 2024.01.23 |
Unity_2기 11주차 (230119) (0) | 2024.01.19 |
Unity_2기 11주차 (230118) (0) | 2024.01.18 |
Unity_2기 11주차 (230117) (0) | 2024.01.17 |