게임에서 "향기 트레일"을 어떻게 모델링 할 수 있습니까?


11

3D 게임을 만들고 플레이어 나 모바일에서 향기 트레일을 따라 다른 개체를 끌어들일 수 있다고 가정 해 봅시다. 이 사용 사례와 일치하는 알려진 데이터 구조가 있습니까?

개인이 거의없는 경우 엔터티 ID에 대한 3D 좌표 맵과 같은 작업을 수행 할 수 있지만 실제 향기는 시간이 지남에 따라 서서히 사라 지므로 다르게 작동합니다. 그리고 대부분의 경우 대략 어디로 갔는지 그리고 그 유형의 물건이 얼마나 많이 갔는지 알 수 있습니다. 근사값은 시간이지나면서 사라질 때까지 최악이됩니다.

나는 정확한 숫자로 시작하고 가장 중요한 자리를 잃을 때까지 가장 작은 자리를 천천히 잃어 버리는 것과 비슷하다고 생각합니다. 그러나 엔티티 ID는 일반적으로 엔티티 유형뿐만 아니라 개별 ID를 포함하도록 인코딩되지 않기 때문에 실제로 도움이되지 않습니다.


Dwarf Fortress는 다음 릴리스에서 이와 비슷한 작업을 수행합니다.
Russell

답변:


10

이 작업을 수행하는 방법에는 여러 가지가 있습니다. 나는 "나에게 명백한"선택을 제안 할 것이지만, 설계 될 수있는 많은 변형이있다. 면책 조항 : 나는 실제로 이와 같은 것을 구현하지 않았습니다.

첫째, 당신의 세계를 다루는 데이터 구조가 필요합니다. 3D 공간에서 NPC 이동을 수행하는 경우 경로 탐색 목적 (예 : 탐색 메시)을위한 이러한 구조가 있거나 필요할 것입니다. 자, 여기에 향을위한 필드를 추가 할 수 있다고 가정 해 봅시다.

그래서 우리는 그 분야에 무엇을 넣습니까? 나는 기록의 목록을 제안합니다 ( 향기 , 강도 , 시간 ). 이 목록은 최대 길이 이하로 유지되고 강도 별로 정렬 되어 약한 향기가 폐기됩니다. 향기는 명시 적으로 각각의 개체 또는 개체 유형에 대해 정의 중 하나 일 수 있었다, 또는 단순히 개체 유형이 될 수 - 당신이 명확하게 추적 할 수 있도록하려는 작업에 따라 달라집니다. 시간 이 향기 레코드가 마지막으로 업데이트되었을 때의 타임 스탬프입니다.

엔티티가 영역을 통과하면 (예 : 내비게이션 메시의 주어진 삼각형) 향기 목록을 업데이트 할 차례입니다. 먼저, 시간 값과 현재 시간 에 따라 경과 한 시간의 양에 따라 모든 강도를 줄입니다. 지수 붕괴는 아마도 합리적인 선택 일 것입니다. 그런 다음 현재 엔티티의 향기를 목록에 추가하십시오. 엔티티 유형에 따라 강도가 달라질 수 있습니다. 그런 다음 목록이 너무 길면 가장 낮은 강도를 버립니다.

추적 결과를 얻으려면 현재 위치의 목록에서 향기를 찾은 다음 모든 이웃에 대해 동일하게 수행하고 가장 강한 향기 방향으로 이동하십시오 (트래커의 원래 방향이 아님).

사실감을 더하려면 :

  • 확산 : 각 위치의 향기의 일부를 이웃에게 주기적으로 옮깁니다. 이것은 트레일을 혼란스럽게하지만 고정 된 물건을 스니핑 할 수 있음을 의미합니다 (음식 찾기, 시체 등). (이 유형의 정보에 전적으로 기반을 둔 행동으로 인식되는 인공 지능의 일종이기도합니다. 풍경은 특정 자원을 얻는 방법 등을 알려줍니다. 이름을 잊어 버렸습니다.) 가장 큰 단점은 시간입니다. 어디서나 확산 계산.

  • 강한 향기는 약한 향기를 감지하지 않아야합니다. 추구하는 향기의 강도를 가장 강한 향기의 강도로 나누고 너무 작 으면 실패합니다. 이것은 의도적으로 혼란스러운 트레일을 혼란스럽게 할 수 있습니다.


9

향기에 대한 맵을 만들기 위해 영향 매핑이라는 기술을 수정합니다. 자연적으로 사라지고 희미 해지 며 다른 향기와 혼합하고 경쟁 할 것입니다. 필요한 것만 똑같이하는 것처럼 들리지만 구현하려는 것보다 더 정교 할 수 있습니다. 최소한 좋은 아이디어를 제공해야하며 현재 사용중인 구조 위에 구현하는 것이 매우 간단합니다.

내가 찾은 튜토리얼 / 설명.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.