Howdy! I have ran into a problem! I recently moved my player pawn to a sub-level and all AI broke…
Can AI not see player pawn if not in Persistent level? does the player pawn need to be in Persistent level?
–Sublevel A (has AI enemies)
–Sublevel B (has player pawn that I possess at begin play)
The problem is my AI has stopped working… I did a few tests and it seems If I stream in “Sublevel A” and if player pawn is in the “Persistent level” nav and AI works. But when I try to have the player pawn in a sub level the AI does not nav to my player pawn. any ideas? am I missing something? can I force the AI to see the player with “Register Perception Stimuli Source”?
anyways any help would be awesome!
so after more tests I found that it might not be because of the level the pawn is in… it seems to be something with possessing a new pawn. I have Pawn-A and Pawn-B (both are the same Blueprint). Pawn-A is used for the intro of my game, after completing the intro I possess Pawn-B and destroy Pawn-A, This seems to break the AI. BUT when I start the game with Pawn-B, complete the intro with Pawn-B, all the AI works. How can I change player pawns without breaking AI? my mind is so confused lol! is there any clean up I need to do? Is it because Pawn-A and Pawn-B are the same BP and just instances of each other? should I make separate “intro pawn” ?
it seems like I should b able to switch pawns and keep AI working …
Thanks in advance!
Can you define “not working” please? Based on your original post, I assume your agent didn’t move to the Player? How do you set the Target for your agent? Are you using BehaviorTrees?
I Fixed it!!! after fiddling around some more I found that adding these two components to the player character fixed the problem!!
Didn’t work with me! for me, the issue is with the Navmesh component, when running each level separately things work fine but when using a streaming level the AI freezes in its place
Sorry to bump this thread but I’m facing the same issue when trying to integrate the AI Behavior toolkit with a custom project from the market place called FPS starter kit.
The AI in the behavior toolkit doesn’t seem to detect the player pawn from the FPS Kit unless it’s the default BP_Player from the AI behavior toolkit.
Any help would be appreciated!
Engine Version: 4.27
I just ran into this issue.
I don’t know how your AI Pawns are placed in the level, but in my case I have mine placed in the streaming level, and when I load the streaming level they are “spawned”, but not in a dynamic way.
Debugging the code, it looks like there is an event called FOnActorSpawned that the AI System is using to communicate to the PerceptionSystem to register sources. Unfortunately the OnActorSpawned delegate event is only called when an Actor is spawned dynamically. (As far as I can see, by debugging. I’m only seeing my Controllers getting called in this callback, they are both spawned dynamically from the Pawn)
I solved the issue (In a code way) by making a game specific AIPerceptionSystem and then re-running bits of logic to register all pawns as source whenever my streaming is completed.
The other way to solve this is to spawn your AI Pawns dynamically (Which I think I’ll ultimately end up doing, but I wanted to understand this problem first. I just haven’t gotten to my AI Spawn systems yet)
Another way to solve that is more BP friendly is to get all of the Actor classes of Pawn AFTER your level has streamed in and to call RegisterPerceptionStimuliSource (it’s a BP Callable function) on each Pawn.
- Hand placed Pawns won’t get the events necessary to Register themselves as source when streaming them in
TLDR Potential Solutions:
1.) Make a game specific AI Perception System in C++ and re-run bits of logic from UAIPerceptionSystem::StartPlay when you’re done streaming in your level
2.) Spawn AI Pawns dynamically
3.) Once level streaming is finished GetAll Actors of Pawn, loop through them and call RegisterPerceptionStimuliSource on each of them
Let me know if anyone has any specific questions.