Hay mucha variedad en cómo puedes hacer esto; Voy a sugerir las opciones "obvias para mí", pero hay muchas variaciones que podrían diseñarse. Descargo de responsabilidad: en realidad no he implementado nada como esto.
Primero, necesita una estructura de datos que cubra su mundo. Si está haciendo un movimiento de NPC en un espacio 3D, entonces probablemente tenga, o eventualmente necesitará, dicha estructura para propósitos de búsqueda de ruta, por ejemplo, una malla de navegación. Entonces, supongamos que podemos agregar un campo para olores a eso.
Entonces, ¿qué ponemos en ese campo? Propongo una lista de registros ( aroma , fuerza , tiempo ). Esta lista se mantiene a una longitud máxima o inferior, y se ordena por fuerza , por lo que se descartarán los aromas débiles. El olor podría ser algo definido explícitamente para cada entidad o tipo de entidad, o podría ser simplemente el tipo de entidad, dependiendo de lo que desee poder rastrear de manera distinta. La hora es una marca de tiempo de cuándo se actualizó por última vez este registro de esencia.
Cuando una entidad pasa a través de un área (por ejemplo, un triángulo dado de la malla de navegación), es hora de actualizar la lista de olores. Primero, disminuya todas las fuerzas de acuerdo con la cantidad de tiempo transcurrido de acuerdo con el valor del tiempo frente al tiempo actual; la disminución exponencial es probablemente una opción razonable aquí. Luego agregue el aroma de la entidad actual a la lista, tal vez con una fuerza que dependa del tipo de entidad. Luego, si la lista se hizo demasiado larga, descarte la fuerza más baja.
Para obtener un resultado de seguimiento, encuentre el aroma en la lista para la ubicación actual, luego haga lo mismo para todos sus vecinos, y vaya en la dirección del aroma más fuerte (esa no es la dirección desde la que acaba de llegar el rastreador).
Para realismo extra:
Difusión: transfiera periódicamente una fracción del aroma en cada ubicación a sus vecinos. Esto confunde los senderos, pero también significa que las cosas estacionarias se pueden rastrear (encontrar comida, cadáveres, etc.). (Incluso es un tipo reconocido de IA para basar las acciones completamente en este tipo de información: el panorama proporciona información sobre qué camino tomar para obtener un recurso en particular, etc. Olvidé el nombre). La principal desventaja es el tiempo dedicado calculando la difusión en todas partes.
Los olores fuertes deben evitar la detección de olores débiles; divida la fuerza del aroma buscado por la fuerza del aroma más fuerte y falle si es demasiado pequeño. Esto podría permitir confundir deliberadamente el rastro de olor de uno.