이 작업을 수행하는 방법에는 여러 가지가 있습니다. 나는 "나에게 명백한"선택을 제안 할 것이지만, 설계 될 수있는 많은 변형이있다. 면책 조항 : 나는 실제로 이와 같은 것을 구현하지 않았습니다.
첫째, 당신의 세계를 다루는 데이터 구조가 필요합니다. 3D 공간에서 NPC 이동을 수행하는 경우 경로 탐색 목적 (예 : 탐색 메시)을위한 이러한 구조가 있거나 필요할 것입니다. 자, 여기에 향을위한 필드를 추가 할 수 있다고 가정 해 봅시다.
그래서 우리는 그 분야에 무엇을 넣습니까? 나는 기록의 목록을 제안합니다 ( 향기 , 강도 , 시간 ). 이 목록은 최대 길이 이하로 유지되고 강도 별로 정렬 되어 약한 향기가 폐기됩니다. 향기는 명시 적으로 각각의 개체 또는 개체 유형에 대해 정의 중 하나 일 수 있었다, 또는 단순히 개체 유형이 될 수 - 당신이 명확하게 추적 할 수 있도록하려는 작업에 따라 달라집니다. 시간 이 향기 레코드가 마지막으로 업데이트되었을 때의 타임 스탬프입니다.
엔티티가 영역을 통과하면 (예 : 내비게이션 메시의 주어진 삼각형) 향기 목록을 업데이트 할 차례입니다. 먼저, 시간 값과 현재 시간 에 따라 경과 한 시간의 양에 따라 모든 강도를 줄입니다. 지수 붕괴는 아마도 합리적인 선택 일 것입니다. 그런 다음 현재 엔티티의 향기를 목록에 추가하십시오. 엔티티 유형에 따라 강도가 달라질 수 있습니다. 그런 다음 목록이 너무 길면 가장 낮은 강도를 버립니다.
추적 결과를 얻으려면 현재 위치의 목록에서 향기를 찾은 다음 모든 이웃에 대해 동일하게 수행하고 가장 강한 향기 방향으로 이동하십시오 (트래커의 원래 방향이 아님).
사실감을 더하려면 :
확산 : 각 위치의 향기의 일부를 이웃에게 주기적으로 옮깁니다. 이것은 트레일을 혼란스럽게하지만 고정 된 물건을 스니핑 할 수 있음을 의미합니다 (음식 찾기, 시체 등). (이 유형의 정보에 전적으로 기반을 둔 행동으로 인식되는 인공 지능의 일종이기도합니다. 풍경은 특정 자원을 얻는 방법 등을 알려줍니다. 이름을 잊어 버렸습니다.) 가장 큰 단점은 시간입니다. 어디서나 확산 계산.
강한 향기는 약한 향기를 감지하지 않아야합니다. 추구하는 향기의 강도를 가장 강한 향기의 강도로 나누고 너무 작 으면 실패합니다. 이것은 의도적으로 혼란스러운 트레일을 혼란스럽게 할 수 있습니다.