Існує велика різноманітність у тому, як ви могли це зробити; Я збираюся запропонувати "очевидний для мене" вибір, але є безліч варіацій, які можна було б розробити. Відмова: Я насправді нічого подібного не реалізував.
По-перше, вам потрібна структура даних, яка охоплює ваш світ. Якщо ви робите рух NPC у тривимірному просторі, то, ймовірно, ви маєте або, зрештою, знадобиться така структура для цілей маршрутизації - скажімо, навігаційної сітки. Отже, припустимо, що ми можемо додати поле для ароматів до цього.
Отже, що ми робимо в цьому полі? Пропоную список записів ( запах , сила , час ). Цей список зберігається на максимальній довжині або нижче і відсортований за силою - тому слабкі аромати будуть відкинуті. Запах може бути що - то явно визначено для кожного об'єкта або об'єкта типу, або це може бути просто тип об'єкту - в залежності від того, що ви хочете , щоб мати можливість відстежувати чітко. Час є відмітка про часу, коли в останній раз був оновлений цей аромат запис.
Коли об'єкт проходить через область (наприклад, заданий трикутник навігаційної сітки), настав час оновити список ароматів. По-перше, зменшення всіх сильних сторін відповідно до кількості часу, що пройшло відповідно до значення часу, порівняно з поточним часом - експоненціальний занепад, ймовірно, є розумним вибором. Потім додайте до списку поточний аромат сутності, можливо, залежно від типу сутності. Тоді якщо список просто занадто довгий, відмовтеся від найнижчої міцності.
Щоб отримати результат відстеження, знайдіть аромат у списку для поточного місця розташування, потім зробіть те саме для всіх його сусідів та йдіть у напрямку найсильнішого запаху (це не напрямок, з якого щойно з'явився трекер).
Для додаткового реалізму:
Дифузія: періодично передайте частинку аромату в кожному місці своїм сусідам. Це плутає сліди, але також означає, що нерухомі речі можна винюхати (знайти їжу, трупи тощо). (Це навіть визнаний різновид AI, що базувати дії цілком на цьому типі інформації - пейзаж надає інформацію про те, яким шляхом рухатися, щоб отримати певний ресурс тощо. Я забуваю його назву.) Основним недоліком є витрачений час розрахунок дифузії скрізь.
Сильні аромати повинні перешкоджати виявленню слабких запахів; розділіть силу шуканого аромату на силу найсильнішого запаху, і невдача, якщо вона занадто мала. Це могло б дозволити навмисне заплутати слід від запаху.