Good day all! I’m hoping to use this as an opportunity to better understand EQS.
In my project, I have two notable use cases for EQS:
1 - My enemy AI uses EQS to find a suitable location to move to (Find Firing Location). This uses the following tests:
- Generator: SimpleGrid, with the grid half size received as a parameter
- Project
- Distance to the player
- Distance to the enemy
- PathExist from the enemy must equal true
2 - My enemy AI uses EQS to find locations to spawn other actors at, which the enemy must be able to reach (Find Generator Locations). This uses the following tests:
- Generator: SimpleGrid, with teh grid half size received as a parameter
- PathExist from the enemy must equal true
With that in mind, I have the following considerations for BOTH queries:
1 - Certain aspects of the project are generated at runtime. The maps are created from a seed, and the selected size of the map scales the enemy characters.
2 - For the querier, EQS can use an actor that is guaranteed to always be at the origin of the map.
That said, both of my EQS queries are running into some hitches that I’m not sure how to handle.
Find Firing Location - Bosses over a certain size seem to result in the PathExist test failing. I thought this might have to do with some sort of limit on the height of a character need adjustments to the out-of-the-box navmesh, but using simple MoveTo nodes and other navigation methods seem to show that’s not the case.
Find Generator Locations - PathExist is also causing weirdness on this one, but in the opposite way. Navmesh islands inside the generated walls are being validated. I don’t understand how that is considered “reachable” with a PathExist considering that the project doesn’t create any navlinks between islands, we have a single arena to fight enemies in. So these additional actors the enemy spawns using the EQS results are place either inside walls, floors, or outside the map if there’s navmesh islands!
I’ve attached some screenshots of the results and the EQS below. I’m sure there’s something here that I’m just not understanding. Any insight and learnings are appreciated! Happy to provide additional information as well!