[UE4] 조립과정

후이재·2020년 8월 17일
2
post-thumbnail

팀원이 만든 차가 있는 도시 맵 레벨에 내가 만들어둔 BP_Human을 합치는 날

💡 어떻게 하고싶냐

  • 횡단보도 신호의 연결(사람, 차)
  • Nav Mesh의 분리(사람, 차)
  • 도시맵에 자유롭게 돌아다니는 사람

🚥 횡단보도 신호의 연결

  • 이것은 미리 Red Right라는 변수로 공유하기로 정했기 때문에 연결이 간단하게 되었음
  • 차의 신호에 맞춰 Red Right이 된 순간 횡단보도의 Trigger을 이용하여 건널 수 있도록 했음
  • 여기서 Nav Mesh의 문제가 발생
  • 차도쪽으로 가는 경로가 더 빨라서 교통사고가 나 버림

⚔️ Nav Mesh의 분리

  • 두가지 액터(사람, 차)의 Nav Mesh가 지금까지는 각각 만들어졌다가 합치니, 남의 길로 가는 일이 발생
  • 차는 특히 '인코너'라고 인도를 파고들었음. 횡단보도가 있는게 원인.
  • 처음엔 빨간불 일때는 그냥 disable시킬까 하다가, 빨간불에도 건너는 사람이 있는 인간미를 살리기 위해 더 찾아보기로 함
  • 이것 때문에 상당히 오랜기간 구글링을 했음
  • 처음엔 Agent를 분리하면 되는건가 했는데, 되지 않음 multiple nav mesh의 검색 실패
  • 이런 기능이 없을리 없을거란 생각에 계속 다른 단어로 검색 이어나감
  • '분리'라는 단어가 생각나 검색해보니(nav mesh seperator) 와 역시 있더라
  • filter를 사용해서 지정된 Nav Area를 제외할건지, 아님 비용을 특정값으로 바꾸던지 할 수 있다.

자세하게 말하자면

  • 이 두개의 클래스의 블루프린트를 사용한다. (NavArea, NavigationQueryFilter) 한글자료는 전무
  • NavArea: 영역의 라벨링. NavModifierVolume를 레벨에 추가하여 AreaClass에 지정할 수 있다.
  • NavigationQueryFilter: 말 그대로 NavMesh에 적용할 필터. BT의 MoveTo나 BTT의 Get Random Location Navigatable Radius등의 Nav영역에서의 움직임과 관련된 노드를 보면 FilterClass 라는 부분이 있는데 그 곳에 이 필터를 적용하면 된다.

  • 나는 제외시킬 곳을 마킹해서 Is Excluded를 true로 두었다.
  • 그렇게 하면 차들은 차도로, 사람은 인도로 잘 돌아다닌다.

    (알록달록하다)

🚶🏾‍♂️ 도시맵에 자유롭게 돌아다니는 사람

  • 이제 사람들을 복제해서 이곳 저곳에 뿌리면 된다.
  • 이 과정에서 횡단보도 Trigger가 모두를 멈추게 하는 오류가 있어서 수정.
  • 사람도 돌아다니니 그럴듯해 보인다.
profile
공부를 위한 벨로그

0개의 댓글