#gameplay-ai
1 messages Β· Page 8 of 1
Hello! I'm trying to study EQS and AI spatial awareness a bit more and figure out what I'm able to do.
I have a basic "find hiding spot" EQS which gets locations on pathfinding grid, does a line trace test to the AI's CurrentTarget (custom Context), and filters out any items that are visible to that actor, and then scores the non-visible items based on distance (preferring the closest to the querier).
It works well enough, the AI runs behind (ish) the nearest wall.
On some occasions, the AI might be totally occluded by the wall, and on some occasions I guess the winning item is JUST barely occluded from the CurrentTarget so the AI sticks out and is hardly "hiding".
My goal here is to get the AI around a corner or something and have them hug the corner, sort of like Condemned's enemies, where they are baaarely visible (and maybe then play a "leaning out" montage)
I have a few ideas on how I could get a more suitable position behind the wall, like having a custom trace test which doesn't trace from the item's position, but something like 20-30uu to the left and to the right as well to simulate the total width of the hiding character, and only returns items which have blocking hits on both/all trace tests.
Then have the grid items be generated more densely to get a more accurate item.
I'm just wondering about anyone's thoughts on how this could be achieved, or if I'm barking up the wrong tree here or missing something with EQS and behavior trees that would make this far easier than my custom test idea.
Personally, I dealt with this by generating cover points as a seperate process and then used EQS to select from the cover points with specific characteristics. So you can make a cover generator select cover with a specific height, with visibility (or non-visibility) to a location, with step-out wall cover etc. Then use EQS to choose from them. I also have a claim system on the point so that more than one AI doesn't go to the same spot.
I didn't feel like making EQS do it all was going to work
That's not to say it couldn't with enough finessing.. but I was mainly just doing what other games did
copied mostly from cryengine in this case π
I've considered this method too, but if "cover" in this case is any corner in a hallway, pillar, etc the AI can put their back up against, what's a method for generating cover points? Perhaps a similar method to what I suggested but not at runtime and instead something generated in-editor? Generating points around the navmesh, running linetrace checks on those points to see if they're near a wall, then on the left and right to see if they are indeed near a corner?
Then I guess collecting all "winning" points and spawning the coverpoint actors with necessary characteristics such as a "claimed" bool etc like you mentioned
I certainly would prefer doing that I was just having a hard time conceptualizing how the generator would be coded. Finding convex corners is certainly more complicated that concave corners lol
Hey guys, does my ai need a real behaviour tree to get nav links working, or does a move to actor/location also work? My ai doesnt fall from platforms. Walk off ledges is activated
regular move to will use nav links just fine if they are set up correctly
A behavior tree is nothing but a way of organizing logic
hmmm, i wonder whats wrong with my nav mesh / nav links, its not working
Is it not moving through the links or is it getting stuck when it attempts to enter the link?
It looks like its moving to the first point, but then doesnt drop down. You can actually see that its supposed to fall, but it doesnt. So either i have to make a new colission capsule, because its a sphete right now, or something else is wrong which i cant figure out. I can send you pics as soon as im home
Yeah I'm sure someone can help you with that if you provide a bit more details :) If it's just for falling off a ledge, then it seems like as long as the positions of the start/end and the settings are correct it should work as long as your CMC if you use a character is set up to allow it to walk off ledges as I recall it has a setting that prevents it
What is cmc? And yes walking of ledges is activated
character movement component
ah ok thanks, so i will take some screenshots now
here some pictures
movement component is default ( its the default pawn blueprint )
*movement component settings are default
I noticed with the behaviour tree, it moves down like it would be a ramp, buts not supposed to be like that :p
I'm using node memory in my service, does it lose the data when the branch evaluates or when the whole tree is re-run?
sorry i dont know what you are talking about :S
shouldnt be
im currently using ai moveto anyway, since the tree would somewhat work, but not as intended
check visual logger
Wouldn't running the tree from the beginning re-assign the node memory?
so the recast default says initpathfinding start point not on navmesh. the controller says trying to find path to "ai name" resulted in error
ok looks like its only happening when im jump. so basicly everything is blue, it also shows my position on the debugger
and the ai's path
as soon it reaches the navlink point, it get "trying to find path to "ainame" resulted in error
ok i guess i have found the problem, the event tick was causing the troubles. But now its just floating down, not realy falling :/
it somehow slows down if reaches the point
Nvm I did some googling and found a nice one by Deam. He says it could be better optimized, and I suppose that could be done by having it generate only in a small area and only when enemies that use cover are in that area. By the looks of it I could probably edit it to do that.
https://github.com/Deams51/CoverGenerator-UE4
Really clever use of the nav mesh.
there is also this: https://github.com/GlassBeaver/CoverSystem
Glass doesnt support it anymore though
but its still one of the most advanced ones ever released so far
not sure but unless you re-set the BT on AIController it should keep the data
i.e. change the braincomponent (what UBehaviorTreeComponent is) or asset
Hi. What's the better way of controlling multiple (around 50) AIs in the arena? Each one have their own AIController or have a single controller that is controlling each and every one of them (even if their types are different, all of them use same class AIController).
if you need a manager for your AIs, either use actor(s) or subsystems
there's no (easy) way to have a single AI controller control multiple pawns. The design is One Pawn <-> One Controller.
@crystal hatch would Gameplay Abilities Behaviors reasonably serve as building blocks for an AI system where there's a separate decision making layer on top of BTs/FSMs/whatever?
You can make Gameplay Abilities work pretty well with AI (see Paragon bots). One problem with GAs is that there's so many different ways to implement things, so much freedom, that if you don't define clear rules for the designers building abilities you'll have hard time having AI reason about the available abilities and their effects.
separate decision making layer on top of BTs/FSMs/whatever?
can you elaborate on this part?
For example a utility-based system which has a few BTs to choose from, and runs one in a loop or once, etc. It seems to be a popular pattern
OH sorry I said Gameplay Abilities instead of Gameplay Behaviors. I meant Gameplay Behaviors
I have a simple actor MeshActor with only a skeletal mesh component. If I tell my AI to Controller->MoveToActor(MeshActor) it works great.
I have an exact duplicate of MeshActor with the only difference being its root component is a Scene component rather than the static mesh actor. Let's call this SceneActor.
If I tell the same exact AI to Controller->MoveToActor(SceneActor) it does move to the correct location, but when it arrives, it stands there for 5 seconds and then the path following request result ends with a Blocked error.
In some cases it reports failure (blocked) even though it is WITHIN the acceptance radius of the original request!
Something about the scene component in the destination actor is causing the navigation system to completely break.
Any ideas what I should look at?
Unless you are writing a lot of expensive functionality, the AI Controller is not going to be what hurts perf wise with ~50 AI. It's going to be the character movement component.
The better option would be to use run behavior dynamic where the tree is set dynamicly based on utility.
The location PathFollowingComponent is testing against is different for these two setups. I suggest using a larger acceptance radius and if that doesn't do it debugging UPathFollowingComponent::HasReachedInternal - it's usually the height test that fails in such cases.
Not really because then you're tied on the blackboard asset. Five years later you need to search for a BB key with a machete
Thank you for the insight. I will give it a shot.
see Paragon bots where? π
okay, thanks π
Only if you make super specific keys. The AAA game I'm working on has at most 10 BB keys.
I'm architecting against other people's mistakes π
You think I don't work with designers? It's better to teach than to architect for their mistakes.
It's a neat system all in all - I've got behavior trees wrapped in objects which handle the initialisation of the BB and can be parametrised by other systems thanks to that. There is some overhead but it feels clean.
That is true, the way I see it I'm saving myself some technical teaching so that we can focus on the interesting stuff
And I see it as getting better AI design by people who understand how AI functions.
Do you have dedicated AI designers?
And @crystal hatch so would Gameplay Behaviours be a good fit for such a system? I'm guessing yes but wanted to doublecheck the intent since they first appear for Smart Object use
In principle it could work, but I have no experience in that regard.
I have 1 tech designer dedicated to combat AI, but other designers make AI.
I've done it the way you are suggesting on Psychonauts 2. I didn't use the gameplay behavior, but used the same functionality that it does for starting/ending a tree. It made things incredibly difficult to create new AI.
What were the issues? If you are allowed to say
The issues were that we had to initialize every blackboard key and clear it when the utility state changed. It was a lot of extra work and it created a lot of bugs.
You'd think it would be worse with sharing a BB, but I find people to be more intentional with their BB keys.
Do I have to worry about it if I bin the whole BB every time I pick a new behaviour?
When (or "why" i guess) designers work on AI related systems? So far in the teams I worked, I always tried to make them not touch anything I do. Because one way or another even most simplest behavior was too complex for a designer to make changes, unless its just editing some properties in the details tab.
I wonder what designers do in bigger teams
for example do they ever script with BP? - in AI context -
Just one example but Rocksteady is very code driven on AI side, almost to the level of hardcoding behaviour
even most simplest behavior was too complex for a designer
Daym, you're working with the wrong people! π
One of the things I love seeing is what those pesky-yet-creative non-programmers do with the tool we provide them with. Every team I worked with in the past had people like that that just needed right tools and some trust from the control-hogging programmers π
Daym, you're working with the wrong people!
π₯²
Yes. One of my favorite tech designers at Epic does all sorts of crazy behavior prototypes spitting out BT nodes and whole trees like it was nothing. Some of it sticks, some not, and the ones that do and are not performant get converted to native. Some are even good enough in BP!
I'm jealous now π I'm too used to also designing what I created π
More and more non-technical people join games, and that's good. I'll soon have 3 paper-only designers on the team. The further this shifts, the more an engineer becomes a system builder rather than content builder
As an AI programmer, you have to be a designer as well. That also means making good tools that reduces the complication of making good AI. I've worked on teams where no designer would touch AI and ones that they felt empowered to. It's always better when more people can try interesting things.
I though so too, but I have expensive functionality it seems. Because when I increase from 20 to 50, my frames drop from 60 to 40~. Models are Paragon regular minions, Behaviour Tree got 3 EQS (1 EQS at root and 2 at different branches) and I've got GAS. With SizeMap I can see that one AI has 200mbs and I've noticed with stats unit I have Game and GPU 26ms usage. So I'm just trying to figure out is it really that expensive or is it because I have seperate AI Controllers for each of those enemies (50 enemies, 50 controllers of the same Class). But thanks for response.
That sounds like you need to profile it.
I have Game and GPU 26ms usage.
this can indicate it's the meshes/animation cost, not AI per se.
Also, remember Paragon? Every minion had its own AIController. The number of AI controllers is not an issue, what they do might be.
Yeah when I turn off behaviour tree and leave AI controllers, it's not the behaviour actions for sure, seems like Paragon mobs is the issue... Thanks both of you.
Navmesh doesnt work in Shipping build
Hello there, has anyone ever faced the problem with navmesh rebuild in shipping build? In development/Debug everything works fine, but when we tried shipping build, we would get super weird behaviour like whole navmesh is moved somewhere, it doesnt rebuild, etc etc.. I read some discussions with same description but no luck with a solution so far
Navmesh doesnt work in Shipping build
Works on my machine π
super weird behaviour like whole navmesh is moved somewhere
ensure your navmesh actor instance location is (0,0,0), or even better: remove it and let the navigation system recreate it. And don't forget to save your map π
what a joker nah π
c'mon man, there bunch of links on the internet about the same issue. e.g
https://forums.unrealengine.com/t/ai-navigation-works-on-development-build-but-not-shipping/396802
or
https://forums.unrealengine.com/t/navmesh-not-updating-on-shipping-build/466418
so have you ever heard about something like that.. we are in a hurry a bit.. We need to deliver the build to a Distributor tonight but till today no one bother to try shipping build and now we have a real deal in here π¦
Enemies doesnβt start walking after spawning when running on a build packaged with the Shipping configuration. It works perfectly however when running the game from the editor or on a packaged Development build. What can be the issue here? What are we missing in the Shipping build vs. Development build? Can it be something entirely else not r...
Hello, I have been trying to find out why the navmesh isnβt updating on shipping builds, its working well on development builds. I am using UE4.24.2 source, world composition [My settings][UE 4.24.2] Force Rebuild on load =True Auto destroy when no navigation = True Runtime generation = Dynamic Observed path tick interval = 0.5 Can be ma...
have you tried turning it off an on again (delete navmesh and auto recreate)?
You should always be testing a shipping or test build.
Deleting the nav mesh actor and force rebuild typically fixes things.
If it doesn't, you can try turning on dynamic nav regen and turn on force build on load.
I am having some issues getting my AI characters to hear a grenade sound. It worked a few days ago, but now it doesn't, and I can't for the life of me figure it out. Can someone please help me?
that's not the case.. we generate navmesh on the fly. On a mission start, when an invisible obstacle(like quest barriers) disappears, etc etc.. everything runs smooth on development build but since tried the shipping build, things tend to be quite complicated. Navmesh is still there, but slightly moved. It is really really weird
that's not the case
what's not the case? Even if your navmesh is fully dynamic there's a RecastNavMesh instance in your map (or your local equivalent; that's assuming you're not doing anything crazy with your navmesh setup). I suggest opening up your persistent map, deleting navigation data actors and rebuilding. Give it a try and report back.
Had a great meeting with an immersive arts collective I'm working with on a story generation toolset last week. Basically brainstorming the toolset they wanted for immersive storytelling. I kind of miss that design discussion, just doesn't tend to happen in academia. They had some whacky ideas and we're going to try some of them. Will have a prototype plugin working before xmas and some fun demo videos early next year (its part of the funding agreement that the company demo's their use of the toolset). Looking forward to sharing some of it (things like voice controlled AI scene generation stuff)
My design notepad from the meeting looks kind of weird too.. got words like "chaos field" and the like π
voice controlled particle effects... hahahaha.. just thinking about it is funny π
natural language is quite hot as a topic for generative stuff right now. Recommend looking at it. Huggingface do some really nice usable libraries for it too.
Voice controlled sounds pretty awesome
I had an idea using that for VR DnD sessions
Procedurally generated as the narrator tells the story and sets the scene
Just wanted to circle back and thank you for your help. You were exactly right about the problem.
I added an override of HasReachedDestination with some visual debugging aids and indeed the goal was hovering above the ground. Unrelated bug caused that, everything now fixed, thanks a ton for sharing your insight. π
My AI is a massive amount of the data going to clients on my dedicated server, specifically the ReplicatedMovement. Is there a good way to clean this up / optimize without making the AI movement choppy?
There's no substitute for experience - I've seen this issue a dozen of times π
Anybody know why my navmesh seems to be in the sky?
No aimoveto or moving nodes seem to work
yeah. The navmesh instance location is borked. Quickest fix is to delete navmesh actor and rebuild navigation.
Alright i'll try that
Seems to appear fine when not in play mode though
which is the weird part
Still got the same problem
I noticed you're using World Partitions. TBH I don't have much experience with navmesh in this context. The only way I can suggest is debugging the relevant code, sorry.
All good thanks for you help
could it perhaps be something to do with the size of the navmesh since i have a pretty large map right now
I do recall there's a commandlet for some navigation world building for partitioned worlds. Have you tried that?
Nope i havent but i'll try find it
I don't think so. How large is "pretty large"?
The size of the navmesh is like 3250x3250x50
3250 what? Tiles? Meters?
I think meteres
it's not large π
Just like the scale of the navmesh is 3250x3250 under the component like transform rot and scale section
Alright
Could be something to do with the engine version since im on 5.1 preview 2
umm... what? You have non-identity scale for your navmesh? The RecastNavMesh actor (or the equivalent)?
right. So it's 3250 times the default volume size π No idea what that is π Around a meter I guess. Still - not large.
ok, so when I said remove the navmesh actor did you remove the bounds or RecastNavMesh actor?
I tried both
I tried changing the position of the navmesh boudns up by 1 then rebuilding navigation and it just kinda works now
Quite weird but hey atleast its fixed
The AI perception callbacks only seem to work when i walk into sight radius, if the actor spawns next to me that event doesnt get triggered? Anyone knows how to solve this with the AI perception component ?
Ok I seemed to solve it by just disabling and enabling the component
I've created a BTService that on an interval attempts to attack. However when that service executes it hard locks the UE editor and i have to force quit and re-open UE. I've reduced everything inside of it down to a is valid check and a print string trying to trouble shoot it. I was modeling my BT after Lyra's BT_Lyra_Shooter_Bot example, that made use of a BTS_Shoot. Is there a catch/known issue around services with intervals? I get 0 logs, and cannot tell what is going on.
This is the BT if it helps at all.
I'd prefer to see the service implementation.
When debugging, it makes it to print string, and hitting next is when it locks up. (its not specifically the print string, just whatever was the last node in the service)
so this 100% happens right after that service executed? 
yes, as soon as the interval is triggered. when i bump it up to say, 5s it will move towards its target for 5s then lock up. I'm hitting play PIE if it matters?
removing the service, no more locking, NPC will just move to its target and then stick to it like glue..
is there any chance you are hitting an ensure() or something similar in C++ side
because assertions collects callstacks when you hit them if you are not in debug mode
and it takes... quite a lot of time
did you try waiting 2-3 minutes?
you would see it in logs i guess though but.. nothing else comes to my mind
So, once i started seeing this, I switched to actively debugging in Rider, i never get a breakpoint from an exception, and ya.. nothing in logs. I'll let it sit here for ~5 and see if i get anything different.
if you ran with DebugGame Editor on Rider it should open the IDE immediately
if it didnt, then something else is wrong
I'm running Debug with the Development Editor | Win64 configuration
i'll switch to DebugGame and see what i get
it wont change anything if you're 100% sure debugger is attached to your editor, which should be if you ran with Debug
it is. i hit other breakpoints
can you try printing callstack on rider debugger
one sec
do this when editor is frozen
see what is evaluated/executed last time
so, hit pause and then invoke that? Because you dont get an immediate window unless you are at a breakpoint (that i'm aware of)
immediate window can be opened manually, at least in VS -- not sure if it allows you to do something with it tho
just play your game and let editor froze itself when you run the service
then invoke that
ahh that may have helped. I think I have a recursive call in c++ thats in an eternal loop.
Specifically the retrieval of the ASC in that service.
is it possible to start running a BT from a specific branch ? or maybe go back to a previous task ? I have reached a point that I need to do sth like this. is it possible without cluttering the BehaviorTree with more decorators or services.. etc
I really wouldn't recommend using the BT for conversation and certainly not to drive the player. There's the experimental common conversation plugin that you can try.
I have thought about doing it in code and not BT but it might get ugly, I thought this might be more intuitive but didn't think, implementing a back functionality would be hard
I cant recommend this enough: https://github.com/MothCocoon/FlowGraph/
I dont' like using plugins, I'd rather implement sth myself and learn sth new, how would you implement a dialogSystem then >?
You can learn from plugins too, though π
FlowGraph is basically a generic graph that lets you run latent nodes and it lets you customize them very easily
so its design makes creating dialogue system easier by its nature
for other type of systems there are GDCs for in-depth explanations
mostly for branching dialogue systems like in RPG games
also this one: https://youtu.be/tAbBID3N64A -- which is my favorite because very flexible
I see thx, what is GDC though ?
Game Developers Conference
developers from industry do talks and GDC organization releases videos/slideshows
oh, thx for sharing!
Try out common conversation. It has an editor tool that is similar to the BT, but works for conversation.
how to prevent AI from getting dragged on edges?
he is getting temporarily stuck on corners
Make sure the capsule fits the character correctly and the agent settings (in project settings) fit the capsule.
i changed to different ai parent, crowd something
and ai stopped catching corners.
What is the difference between a USmartObjectBehaviorDefinition and a UGameplayBehavior? It seems the UGameplayBehavior also has access to the smart object owner.
wait a minute. the rabbit hole just got deeper.
what is the difference between gameplay behaviors and gameplay interactions?
What kind of movement component do games like Ark use for AI?
I notice that teams tend to be stored in the PlayerState (looking at ShooterGame). If I have a structure/building that can be assigned a team (say, a barracks for auto spawning pawns of its team), does that mean I should have the barracks be a pawn with an AIController that has a PlayerState?
feels a little overkill to make a structure be possessed by an AIController, however I don't want to have two different implementations of interacting with an Actor's teams
This depends on how you intend it to be identified
Nothing says you can't simply have a field on your building that tells you which team it belongs to
PlayerState etc. would be used for things that are players (human or AI), of course you don't need to do all that for things that aren't
Thanks, I appreciate the response. I'm using gameplay behaviors & smart objects to facilitate a "capture" interaction. Feasibly this could be used on buildings or units. If the implementation of the actor's team is the same, then the gameplay behavior is streamlined. If for units its stored in their playerstate, and for structures its in their actor, then the implementation for team-checking becomes divergent.
Also, does anyone know the difference between User Tags & Object Tags for a smart object definition?
I'm reading through the source code and looking at its usage in the USmartObjectSubsystem but I'm still scratching my head
I'm not familiar with the smart object stuff, but you should be able to identify teams by using IGenericTeamAgentInterface
So regardless of how the information is stored under the hood, if the actor implements that, that should be enough.... or if not, guess you could always use a custom interface :)
so say part of my behavior tree is devoted to roaming. Is adding a "Is roaming enabled decorator" then changing the value to false on child classes the most elegant way to handle that for child classes?
thanks for posting this! I just watched through it and it's fascinating. I'd absolutely love to play around with this sort of system, but it's well beyond my capabilities to implement something like this on my own. do you know of any marketplace plugins that implement something similar?
The USmartObejectBehaviorDefinition is just a wrapper for a gameplay behavior, used by smart objects to drive behavior.
(looking at ShooterGame)
Don't. Shooter game is extremely outdated. Use Lyra instead.
Thanks for the response @crystal hatch
any idea why a dynamically spawned smart link isn't functioning
dynamic regular links work but not smart
okay... they spontenously started working after a editor restart
there isnt one, but I'm developing one to release as open source.. though I'm notorious with releasing things once and never updating it π I'm also bloated with tasks in my daily job so not sure when I can finish it.
actually I finished it a while ago already but I wanted to provide a custom parser to let people write conditions like how it's presented in that GDC.. like someValue > 4 && otherValue == true on editor.. probably with csv or json support. but it was more time consuming than I thought and I was out of free time to continue developing the plugin
a simpler approach is tag based one, but only useful for "barks" rather than "conversations". an example from Division 2 is on page 67
and there is an example in CryEngine, that is more advanced than anything I've seen as an example of what explained in GDC but since it was made in CryEngine framework I couldnt reason many things written: https://github.com/ValtoGameEngines/CryEngine/tree/release/Code/CryEngine/CryDynamicResponseSystem
I said if the NPC doesn't see us, it should wander around randomly, if it sees us, it should run towards us. I adjusted the NPC tree by checking it with the bool variable. but why does the NPC stop when it sees us? can someone help?
if you're referring to something said or posted in the past please reply to it, otherwise we're missing context
that's a super cool project you've been working on then! do you have a repository or anything like that I could follow in case you ever decide to post your code?
the tag-based approach is an interesting setup. I'd definitely want to lean heavily on gameplay tags but would also want to utilize other things like attributes from the gameplay ability system. I've been looking for the video of the presentation from that slide show but it seems the archives are incomplete
GDC released only PDF for that, video might be released in the future or maybe its paywalled
Sadly there isnt one yet, even though core functionality exists I still need to polish it and go through some tests. But I'll definitely share it on github when it's done
The "fuzzy tuple/pattern matching" they mention in the GDC is actually a "language feature", and C++ doesnt implement it by default - they wrote a custom software/engine for it to make it optimized afaik. Its probably implemented in some other old school languages like haskell, erlang.. and maaaybe in C#. I went through tons of research about finding the best and most optimized way to implement it on my own, but I ended up in an alternative solution. But I couldnt test it yet, so even if I release it today it'll be unusable because there wont be a proper way to add dialogues because you'll be adding structs to nested arrays in editor, which is infeasible to work with if you are developing something serious π
thats why I'm working on that parser I mentioned earlier, so designers will be able to type to a string field in editor and system will convert it into actual data with reflection system
oh wow. I knew the solution was over my head, but that's a lot more involved than what I expected.
I just followed you on github so hopefully I'll see if you ever decide to publish any of your work. thanks a lot π
hello, I'm new to ai behavior tree
what does lock ai logic mean? does it mean during this task, BT stops checking conditions?
animation system and AI system (brain component) has resource locking systems
it pauses the execution logic when you lock
so lets say if you are already running MoveTo task in BT, and you run that BP node, it stops the execution of BT so two moveto nodes wont conflict
or any other behavior
What if I still want to check BT condition during this move? do I need to store this task and manually kill it?
just uncheck the tickbox
if you dont lock it, it will continue evaluating the tree
yes it's inside a bttask
path following logic is not a part of behavior tree, so even without BT it would work if you just manage to call Move To (its actually a function in AIController, MoveTo and the node you posted are just wrappers for it with additional params to make your life easier)
if you are in BTTask, do not use Lock AI Logic
if you abort the current task or switch to another task, call StopMovement in AIController
ok
thanks
Solves my problem. Want my AI to break circling player task and switch to chasing task immediately if player gets out of attack range when the circling move is still running.
Adding a little bit of cooldown to the branch seems to help with BT flashing too fast.
I struggle to understand the condition for Bool Match on a Trace test in environment query:
If I want to get the point of a donut from which the player is visible then it seems like I need to set Bool Match to false. Which doesn't make sense to me, since in the block it displays it as "require not hit".
How do I need to understand bool match?
From the docs:
When performing a Test, not matching this value will not change the score.
I interpret this as all points that don't lead to a sucessfuly trace (line of sight) should be filtered out. Therefore, Bool Match should be true, since I only want to keep the points where the trace was indeed sucessful. However, something seems to be wrong about my logic here, because to get it to work I need to set Bool Match to false.
is there some way to integrate something like exchangeable sub routines in the AI, or to execute two BTs for one actor?
Maybe you are looking for Run Dy namic behavior task in BT?
What is the best way of checking line of sight without using perception component?
My AIs are lightweight and doesnt require anything perception component provides other than checking LoS
I guess there is AIController::LineOfSightTo
but it also seems to be doing linetraces which makes me think it its really accurate or not
what else would you expect the system to use if not a line trace?
It does 4 line traces to different locations, I'm wondering how it detects things between those traces
I think I'll write a custom one..
What makes you think it's not really accurate? It's a lot better once you adjust the view location, but what kind of precision do you actually need?
Since there are only four (+ trace from view point makes it five) traces and I thought if radius is big enough traces might not be able to hit actors between
Have you tried it? The vast majority of the time you don't actually need that complicated of line of sight functionality.
Oh wow, that was embarassing, thought I'd goofed with some rendering because it was running slowly.. turns out I was literally downloading the planet in the background, forgot about those torrent files π hahaha
The stalker series picked random bones and just did traces to those.. I did the same and it felt pretty decent.. perhaps not 100% immediate every time, but pretty damn near.. and you can priorities specific bones if you like
thank you, that seems to work in combination with simple parallel π
Hi, so im quite new to AI but saw it as an inevitable step in the game im making. So, im making an rts style game, where units can be selected and pressed to move. Currently, i can make them move with the Move To Location command, but they all try to move to same position. How can i utilize the AI systems to make them move to form formations automatically and space out? And select optimal location based on current position?
And how can i program them to move out of the way when another unit is attempting to move through them?
Or should that just be accomplished by allowing the moving actor to push the others? π€
yeah, it keeps returning true
easy mode: using EQS and trying to move on with what it can provide
difficult mode: writing a path following component child and making AIs follow given path with formations, with avoidance and such
I just saw that EQS was a feature in development, and i want to avoid bugs as much as possible. So i think i will try the path following method. Thanks!
EQS is marked as experimental only due to the toolβs UI, which is not to Epicβs standards and we donβt have time to work on it. The core of EQS is as solid as it gets and thereβs a countless number of games that shipped with it (both internal end external, including all Epicβs games from past 8ish years). The core is so mature no more than two issues get reported a year for it, and itβs edge cases usually.
Ah okay, thank you. I'm still just learning about AI, and was thinking to stick to BT's and BB's to make sure i don't confuse myself with some special feature that Epic is working on :)
But if it is so solid, i will use it.
EQS also ties well with BT and BB, and it's super powerful for a lot of things (not only in-game AI). I strongly encourage everyone to get to know it better and use it to its advantage.
Re Epic still working on it - I'm actually spending some (rare) spare cycles on planning EQS2.0 actually, based on Mass π
this might not have been announced publicly yet, so.. there you go π
Sounds exciting! :)
Thank you
I wonder how EQS would compare to this https://twitter.com/skylonxe/status/1588861427380805633?s=46&t=UkmCzsMlxlj7ukCZRwzgIg . To me it looks a bit too much like EQS. Not sure what was the motivation to create this instead of using EQS. Looking forward to any movement in EQS, I hope it happens one day. My wishes are only more modern handling of stuff like param types (I guess planned as I heard state tree has that already covered). Now I also have a great opportunity to say something I imagined to say at the beginning of development of all AI systems: donβt you dare to use there somewhere AAIController instead of AActor π These things are too useful to be tied to AI stuff.
Generic targeting system plugin was recently added to UE5. It can be used also with abilities to build your targeting in a modular way using tasks like selections, filters and sorts. https://t.co/VVHuApxU4B
My wishes are only more modern handling of stuff like param types (I guess planned as I heard state tree has that already covered)
yep.
donβt you dare to use there somewhere AAIController instead of AActor π
I do what I want! π But yeah, that's the plan. Overreliance on the AI controller is a mistake of my long gone AI programming youth π
Awesome :P thanks for the reply.
actual RTS games require path following method.. but a different one of course, because the more your scale increases the more work and optimization you have to do. Unreal is not suitable for big scaled RTS games
For example unreal's current actor transform system was used by Sony for PS2, but they refactored it at 2006 for PS3, and at 2007 they made a talk about how terrible it was. And unreal still using that system in 2022. dont expect to have moving 1k actors in Unreal without some crazy changes in the core system of UE π
Mass aims to address that without actually gutting the engine.
yeah, to be honest, it was the best idea so far I've seen π
it literally provides an alternate gameplay framework
not yet, but we do want to provide a lot
now thinking about it, since years looks like AI team actually had the lead of development for most of the gameplay framework in Unreal Engine 
so I'm not surprised #mass came out from AI team π
That's not fair to the rest of the Framework team. They do a lot of grunt work, and do important lower-level changes to support open world/large scale games. It's just that those features are less visible on the surface.
Yeah, sure. Though when developing a project without diving into low-level code you mostly see things are shaped by AI team
i cant see anything blocking the line of sight here tho, assuming the target is the cube
sorta sounds like it just traces towards target, regardless of source rotation
yeah i guess its not what I'm looking for
until I write my custom one I'll go with that function + dot check i guess
Avoidance Alice wants a word
I think it will be fine π
Im not planning on doing all of it alone, so later down the road i can always get help to develop more advanced systems. For now i found a workaround which makes my units move a bit like they do in games like starcraft, which is decent.
Am I too young or green to understand this joke? 
if we put performance and technical worries to a side, difference between EQS and pathfinding/avoidance choice is, EQS lets you choose a point in a single place, meanwhile other option lets you manipulate the currently followed path
so its more flexible for a fast paced action rts where a lot of things going on in the screen
So, had a few days of working in Unity.. I like the C# language, but got really annoyed at the pass by reference nature of its data structures.. real pain in the arse
Kept blowing past my geometry buffers because it was using a class for primitives and apparently it was treating every geometry primitive as a shared reference rather than what I actually wanted (individual values). Sheesh
Now back to voice control plugin
aww
I'm on the verge of rage quitting! How do I create a [Combat Manager].
I'm trying to create an open world game similar to Shadow of War.
I need Enemy AI to attack one at a time and I keep failing. Pictures would help pls.
are you trying to have something like a token system?
only single AI attacks to player at once
In this 2018 GDC session, id Software's Kurt Loudy & Jake Campbell detail the philosophy behind the combat design of 2016's DOOM and its implementation, and discuss the possibility for its inclusion in multiple genres.
Register for GDC: http://ubm.io/2gk5KTU
Join the GDC mailing list: http://www.gdconf.com/subscribe
Follow GDC on Twitter: htt...
@celest python I watched the important bits but I still don't get it. Do you have blueprints or a behavior tree I could follow to at least get step 1
I have an open source plugin for that: https://github.com/intaxwashere/AITokenSystemUE
all you need to do is setup the plugin properly then subclass UAITokenBase and override SelectBestSubscriber function and do your own logic to select best one
taking our jobs
I just need.. uh.. checks notes have 20+ years of CS experience and some god-level ML knowledge to do that.. π
Yeah, well, easy to come by π hhahaha
See you 20 years later 
unless I pass the exams to Lincoln University to study CS π
I think you'd be ok.. given you're already programming
You can learn a hell of a lot by actually doing it π
One of the most solid computer scientist I've spoke earlier was said "the useful part was about studying CS is knowing what book to read and the homework assignments" and "rest of the time was wasted"
so if I'd ever study CS, it would be probably only to involve into ML researches or projects etc.
because in 2022 you can already access information everywhere and get code reviews, open source projects everywhere etc.
Yeah, its a bit of a weird viewpoint, but yes you can pretty much access anything
degrees are more like social clubs than anything really important knowledge wise
BUT, its a friendly place to learn stuff if you're of a mind to, which isn't that often π
I mean, I've got a masters student looking at neural radiance fields to try and generate usable meshes for them.. I'd argue that was a good thing to work on and study
The reality is, most students would be happy just paying the $$ and taking the degree paper.. I'd rather we offered them for sale, but apparently we can't π
The whole system is messed up
I'd rather we offered them for sale, but apparently we can't
π
Would be better honestly, to make a small studio and just work on really hard stuff for a few years π
I guess that's what you're turning your classroom into, right? because whenever I see you are talking about your project your students also always involved in it - unless its completely commercial thing
That said, there's a lot to learn out there.. if you're that way inclined.. lots of avenues for mindful approaches (neuroscience and neuroaesthetics for instance)
I wish I could do more
mostly I'm just doing commercial contracts myself.. don't have enough time to do enough of it to get a proper business going
So much opportunity, so little time π
@celest python Wait I never used github before does that mean I have to install Git to UE4 plug-in or can I just use the code immediately?
I guess you want to continue in academia too, then?
you can either use GitHub desktop or just download as zip directly
then paste the folder to your ProjectFolder/Plugins
then compile your project
Honestly, not even sure anymore.. we're about to go on strike, I suspect it'll get nasty, in some ways I'm hoping I get laid off or something, will give me the incentive to take a new approach
if you are not using C++ you can use this to make UE automatically compile the plugin: https://landelare.github.io/2022/09/27/tips-and-tricks.html#automatically-update-c-binaries
I can come back to the research later.. commercializing it would be fun right now
that wasnt the thing I expected to hear π
Lots of weird stuff going on in the UK right now
but yeah no doubt there is a valid reason behind it
and education is no exception
my country is no different so I completely understand
They're basically pushing us to bring in $$ as consultancy etc.. at which point I'd rather work for myself π
that'd be way better for you I guess π
who knows maybe you can even create some cool stuff for UE too π
Less dealing with beaurocracy at least
Yeah, I've already got a big company in London interested in my current project's outcome
After Thursdays event π
I guess voice based AI driven pcg got them a bit interested
are you thinking about some end-user facing or something like a (social) platform related AI work soon?
be it something related with game dev workflow or something like text-generator AI for users etc
This is mostly production tooling
Bit in the middle.. the use case is non-expert creative types in VR/AR
and virtual production
Basically, its all immersive Unreal Engine stuff, but we're exploring voice driven PCG as a toolset for creative exploration in that space..
given that we've got pretty solid natural language tools and voice understanding and voice generation.. and good language modelling of characters and the like..
I mean anyone can do this stuff, as long as they grok ML and PCG and UE π hahahaha..
I guess industry relies on a few open source frameworks.. π
I've got some second year students looking at maybe tying gpt3 and stable diffusion together
there's so much stuff to sort of smoosh together if you're of a mind to
I guess exact same thing introduced to beta.character.ai a few days ago
not SD but a different type of it
yeah, I told them to look at that too
those large language models are pretty much everywhere at this point
if everything shares the same base framework where is the innovation tho
everything is GPT3 
its not all the same base.. there's bloom which is an open source one, there's gpt3 which is OpenAI + Microsoft, there's T5XXL which is googles one, there are a few more. There's huggingface's api etc.
and there are like a dozen more being trained at massive scale currently, both open and closed source
what it takes to create one from scratch? -- if you dont mind explaining like I dont know anything π
is it same thing like not creating a game engine from zero but working on UE
basically, scrape every bit of text you can from the internet π
then train a model with attention across all of it for thousands of hours π
What is the difference between User Tag Filter and Object Activation Tag Filter in a SmartObject Definition?
I looked at the source code and couldn't quite infer
I guess the more computation power the more faster it is -- so its mostly $$ stopping people to train GPT3s from zero
the basic idea of these language models, is that at larger scale, they learn concepts.. not just words like "dog" or "cat", but they have the concept of dog as a cluster in the language model.. so dog, chihuahua, canine etc.. all live in the same area in latent space (like a reduced set of numbers that captures the core of language)
they're spending like half a million quid training these models
or more
quid?
GBP π
oh π
pounds
the power of the models, is that you can ask them to do things like fill-in-the-blanks on masked input.. "the ??? sat on the mat" style
or you can ask them to give you all the verbs, or nouns
you can ask them questions about the sentences
you can see longer term relationships between texts, because they've literally seen all the text there is on a concept
how it "interprets" the text? I noticed beta.character.ai first tries to interpret the text you send then stores "facts" to its memory to build up the next text its going to generate. Ofc it must be something very complex on low level side but on high level idea it doesnt seem like rocket science
so for instance your character.ai thing, they've seen all the albert einstien text out there.. his history, his writing, people discussing what he said etc..
it interprets it as a latent vector... its basically a compressed code (bunch of floats)
the point is that you can give it something like an image that has been compressed into its own latent vector space... and something like Clip, which was trained on image/text pairs.. so the text gets compressed into a vector along with the image.. they map to the same space in vector space
so there is a "nativization" step to make AI approximate the output
so for instance, the word "dog" is in the same latent space as the image of a dog
turns things into "nueral" language
its a tensor of numbers which represents a notional concept space, where different words/images/whatever are expressed as clusters of similar things
i.e. dog image maps to same space as "dog" text
(not quite, but conceptually)
sounds terrible for CPU cache, I guess I understand why GPUs are widely used π
from a practical point of view, they're just tokenized vectors
the point is, given billions of them.. the model learns the relationships between concepts
so if you just have.. enough power to supply the training you can just re-create a GPT3 with enough of engineering care?
i.e. it probably sees "hair" quite often near the word "dog" so it "knows" that dogs are likely hairy
yeah, bloom is an open source gpt3, trained on a cluster..
@celest python I feel like I'm walking in the dark. I've never used visual studio.
did you check the link I've posted?
if you put that to .ini file mentioned, it will compile automatically for you
so you dont have to deal with Visual Studio
or simply just open the .uproject and when it asks you to automatically compile things press yes
then mostly data scientist matter in here
to organize the data to not make AI biased to produce wrong results
so it can train itself
with less engineering care
so you dont have to manually train AI each time
There's a whole funnel of stuff to work on.. yeah, trying to unbias the training data is part of it
most of the time, you don't train AI from scratch.. you use a process called fine tuning, which basically freezes parts of the model and lets you train the other bits
with ML, you're basically pushing floats up and down in the model by tiny amounts
try some practical stuff and you'll be hooked
but be warned, you'll have to learn python (ptooey)
yeah switching to weak typed language from C++ wont be smooth i guess π but a small price to pay
where should I start?
books i guess?
huggingface π
I should directly start working with a framework? 
hmm, books? nah not really.. try the fast.ai course, its free and pretty good to get straight into it
you're very welcome
apparently they're doing an image generation course with fast.ai and jonathan whittaker.. due out in a week or so
the reason I mention fast.ai is that they basically go straight into doing something cool with ML, then back up and introduce all the parts.. its a neat way to teach
means you understand what it can do even though you don't know why until later π
@celest python Sorry I utterly failed to follow directions maybe I'll try something else.
if you can explain the steps you followed and why you failed I can try to help
- Extracted the Token
- added the auto compile set up to UE4
- I didn't have projectfolder/plug-ins for my UE4 project so I created one in the actual project
- Nothing happened
can you show whats inside of your Plugins folder?
it should be Plugins/AnotherFolderThatYouCanNameToAnything/ExtractYourZipHere
UE looks down to paths by folders and finds .uplugins files on each folder to recognize them as plugins
if you directly extracted it to /Plugins it mgiht not work
Alright I give it a shot after I take a break
is there a way to set the socket for the AI Perception component?
having a problem with my AI, in the middle of a chase, or even if i stand in front of him, randomly he will stop chasing me and then start patrolling again. does anyone know what i should edit in what i have, or a way to fix this problem
right before i added his random patrolling, there was no problem with him following me
his peripheral vision angle shouldnt be the problem
The way that you have it set up it will patrol regardless of if it's already chasing. Because you are doing it in tick (not recommended) and not checking if it's chasing.
It's not a scene component, so you can't set a socket. You can override the functionality for getting the view location/rotation and use a specific socket.
so what should i replace the event tick for
replaced with custom event, works now
you can recall event after this node
to make it loop
latent nodes and tick doesnt go well
so what is it called, and do i link it to the is moving set?
and what is the noe called i have to replace with tick, still very next with this, only been doing it for a week
you can call the event node you created
the one you replaced with tick
to the is moving set?
after it
Okay so delete the event tick, and put "IsMoving?" Where the event tick currently is
I am having problems understanding what the different versions of "Abort" do
Abort Self / Abort Lower / Abort Both
any idea where I can get some info about this? π€
or help me understand this:
- Abort self is to cancel the subtree if the condition becomes false
- Abort lower is to cancel the other subtrees if the condition becomes true
is this correct? π€
Pretty much, yeah. "Abort lower" is short for "Abort Lower Priority branches", meaning if observed condition's value changes from false to true the gated branch will be reconsidered. If there are no valid tasks to run in this newly tested branch the currently running one will continue.
How can I set up Detour Crowd avoidance? I have my custom AI Controller set as AI Controller Class on a Character Blueprint, this custom AI Controller has Detour Crowd AIController as parent class, but it doesn't work. AI doesn't avoid other character..
the other character needs to be part of detour simulation as well. If it's not an AI agent it needs a bit more work to get included in the sim. See class comment in CrowdManager.h
Oo I see, thank you!
Can you take the replication one too pls π I think Mikko said it was on his plate when he took the BP one
https://github.com/EpicGames/UnrealEngine/pull/9280
Isn't there a BT node for modifying BB values?
Do I need to create a task?
there isnt a generic one
alright
BTW, I don't get the point of conditional loop decorator checking if a key is set or not rather than its value.
How can I do the same but checking a boolean value?
I mean, same as before? Do I create my own decorator?
Also I need the task to be executed at least once, like a do while
Can't see how to do that
Can AIPerception be used with an AI that can see 180 in horizontal and also vertical?
By default it seems that it can only see horizontal and a bit vertical as it seems a cylinder rather than spherical.
I have been trying to troubleshoot my knockback function and it seems that i cannot affect AI actors movement when they are running behaviour trees. Is there any easy way to override this?
For some reason USmartObjectSubsystem::FindSmartObjects isn't finding any smart objects on a world partition level. However, it is finding smart objects on a non-world partition level
does anyone have any ideas?
I found the SmartObjectionColelction actor in the world partition level and hit "rebuild collection" and can see the smart objects in the collection
How are you trying to knock back? Using launch character should still work.
checking now
this seems to work but isnt that because of how physics can affect the actor
Launch character uses the movement component.
oh. well... launch character had a noticable effect but still something in the AI controller that interfered. Im trying first to interpolate the position based on the knockvector first.
but thanks for showing me launch character
Hello! I am trying to create some wall-traversing NPC's (Spider robots), but I'm only now realizing that navmeshes are Z-up only. Are there any plugins that does a decent job of vertical traversing, or will I just have to build my own pathfinding from scratch?
Haven't found anything premade so far
Unless you added something, the only time the AI controller should be dealing with movement is when navigating.
there is a behaviour tree that controls the movement
if i just make a new actor and apply the knockback to it, it works. assigning the ai controller disables the knockback
i tried disable movement and stopping movement as tasks
nothing works
The behavior tree only controls movement by navigating, unless you added something.
i will redo the BT and see where it stops working
Man I have no idea what I did but suddenly my character won't move...I checked the player controller and the Simple Move To is firing...the character simply isn't moving....
This was the culprit. The ai guide i was following edited this value
It's on Mikko, and it's going through internal discussions with network people (we the AI folk don't know everything. I know, it's hard to imagine π ). The intent is definitely to pull it in, just needs massaging.
SmartObjects do not properly support WP worlds just yet. I'm actually working on it right now.
Check vislog (Default Answer #1!) and make sure navmesh is there.
Thanks for the response. Would this explain why one of my smart objects returned in a FSmartObjectRequestResult not finding its proper SmartObjectComponent from USmartObjectSubsystem::GetSmartObjectComponentByRequestResult? I am not sure why thats happening.
Also, do you have a rough ETA on when they would support WP? Is this something I could submit a PR for?
Would this explain why one of my smart objects returned in a FSmartObjectRequestResult not finding its proper SmartObjectComponent
This is not WP related, it's a feature of the Collection. The whole point of the collection is that you can simulate smart objects (using Mass under the hood) without needing the actor to be streamed in. This logic is a bit convoluted and I'm working on changing that.
Also, do you have a rough ETA on when they would support WP? Is this something I could submit a PR for?
This should be available in 5.2. If you want to use it asap (i.e. using Master branch) then it should be ready(ish) in around two weeks (baring no distractions). You can post PRs but note that it's not really an implementation issue, the architecture of the approach needs to change.
Thanks so much for the info. Is there a way that I can guarantee the actor is loaded so GetSmartObjectComponentByRequestResult succeeds? In my scenario, this is happening on an actor that is loaded in (default OpenWorld world-partition level with all cells loaded) right next to me.
Interesting. In principle, this could happen only for a smart object that has been added to the collection as part of collection building, and then gets streamed out at runtime. Can you confirm the actor is there but GetSmartObjectComponentByRequestResult fails? Which UE version are you using?
Absolutely, will confirm. Booting up. Version 5.1 preview 2
It's taking me longer than expected to get results. When I remove the actor with the smart object from the level to validate that is the associated actor, my player's spawn gets despawned after a few seconds which prevents me from opening an in-game menu to check
okay got it. confirmed the actor
Pressed F8 after hitting play and I'm looking at the actor
and you're sure the smart object you're handing is associated to this actor?
I hit "Rebuild Colelction" on SmartObjectCollection and found 3 collection entries, one associating with each of the 3 "depot" actors, each of which has a smart object component
Do you happen to hit a failed ensure when you end PIE?
Querying USmartObjectSubsystem::FindSmartObjects(FSmartObjectRequest), I get three results, one for each of the bases. and for one of them it can't find the smart object component when running USmartObjectSubsystem::GetSmartObjectComponentByRequestResult
will check now
will this be in output log?
I did a ctrl + f in Output Log for "ensure" and didn't find any matches
message log looks fine, no errors or warnings
you can use log LogSmartObject veryverbose console command to see all the logging SOs print out. Or use vislog, I believe it doesn't care about the verbosity setting of any given log category.
might contain hints.
LogSmartObject: VeryVerbose: Registering BP_TerritoryControlBase_C /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DACE4501_2092616428 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
LogSmartObject: VeryVerbose: BP_TerritoryControlBase_C_UAID_E45E37FB55DACE4501_2092616428 not added to collection since Main Collection is not set yet. Storing SOComponent instance for registration once a collection is set.
LogSmartObject: VeryVerbose: Registering BP_TerritoryControlBase_C /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DACF4501_1154875607 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
LogSmartObject: VeryVerbose: BP_TerritoryControlBase_C_UAID_E45E37FB55DACF4501_1154875607 not added to collection since Main Collection is not set yet. Storing SOComponent instance for registration once a collection is set.
LogSmartObject: Main collection 'SmartObjectCollection_0' registered with 3 entries
LogSmartObject: VeryVerbose: Registering BP_TerritoryControlBase_C /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DACE4501_2092616428 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
LogSmartObject: VeryVerbose: 'BP_TerritoryControlBase_C_UAID_E45E37FB55DACE4501_2092616428[2149769503]' already registered to collection 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0'
LogSmartObject: VeryVerbose: Registering BP_TerritoryControlBase_C /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DACF4501_1154875607 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
LogSmartObject: VeryVerbose: 'BP_TerritoryControlBase_C_UAID_E45E37FB55DACF4501_1154875607[1782400616]' already registered to collection 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0'
LogSmartObject: Collection 'SmartObjectCollection_0' registration from USmartObjectSubsystem initialization - ESmartObjectCollectionRegistrationResult::Succeeded
This is only referencing 2 out of the 3, first hint
going through the log...
LogSmartObject: VeryVerbose: Registering BP_TerritoryControlBase_C /Memory/UEDPIE_0_MainGrid_L0_X-1_Y0_DL0.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DA824701_2019018016 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
LogSmartObject: VeryVerbose: 'BP_TerritoryControlBase_C_UAID_E45E37FB55DA824701_2019018016[4231601148]' already registered to collection 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0'
LogSmartObject: Verbose: Adding SmartObject '1782400616' to runtime simulation.
LogSmartObject: Verbose: Adding SmartObject '2149769503' to runtime simulation.
LogSmartObject: Verbose: Adding SmartObject '4231601148' to runtime simulation.
LogSmartObject: Rebuilding collection 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0' from component list
LogSmartObject: Reseting collection 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0'
LogSmartObject: Verbose: Adding 'BP_TerritoryControlBase_C_UAID_E45E37FB55DACE4501_2092616428[2149769503]' to collection 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0'
LogSmartObject: Verbose: Adding 'BP_TerritoryControlBase_C_UAID_E45E37FB55DACF4501_1154875607[1782400616]' to collection 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0'
LogSmartObject: Verbose: Claim SUCCEEDED for handle Object:4231601148 Slot:3 User:1. Slot State is 'ESmartObjectSlotState::Claimed'
LogSmartObject: Verbose: Start using handle Object:4231601148 Slot:3 User:1
LogTemp: Error: SmartObjectOwner in UCaptureBehavior::Trigger does not extend team interface
LogSmartObject: Verbose: Released using handle Object:4231601148 Slot:3 User:1
LogSmartObject: Verbose: Claim SUCCEEDED for handle Object:4231601148 Slot:3 User:2. Slot State is 'ESmartObjectSlotState::Claimed'
LogSmartObject: Verbose: Start using handle Object:4231601148 Slot:3 User:2
LogTemp: Error: SmartObjectOwner in UCaptureBehavior::Trigger does not extend team interface
LogSmartObject: Verbose: Released using handle Object:4231601148 Slot:3 User:2
LogSmartObject: Verbose: Claim SUCCEEDED for handle Object:4231601148 Slot:3 User:3. Slot State is 'ESmartObjectSlotState::Claimed'
LogSmartObject: Verbose: Start using handle Object:4231601148 Slot:3 User:3
LogTemp: Error: SmartObjectOwner in UCaptureBehavior::Trigger does not extend team interface
LogSmartObject: Verbose: Released using handle Object:4231601148 Slot:3 User:3
Final bit:
LogSmartObject: VeryVerbose: Unregistering BP_TerritoryControlBase_C /Memory/UEDPIE_0_MainGrid_L0_X-1_Y0_DL0.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DA824701_2019018016 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
LogSmartObject: Verbose: Removing SmartObject '2149769503' from runtime simulation.
LogSmartObject: Verbose: Removing SmartObject '1782400616' from runtime simulation.
LogSmartObject: Verbose: Removing SmartObject '4231601148' from runtime simulation.
LogSmartObject: 'SmartObjectCollection /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.SmartObjectCollection_0' ASmartObjectCollection::EndPlay - Succeeded
LogWorld: UWorld::CleanupWorld for Level_Virtual, bSessionEnded=true, bCleanupResources=true
MassEntity: New page: MassEntity
LogSmartObject: VeryVerbose: Unregistering BP_TerritoryControlBase_C /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DACE4501_2092616428 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
LogSmartObject: VeryVerbose: Unregistering BP_TerritoryControlBase_C /Game/RoyalDivision/World/Levels/Virtual/UEDPIE_0_Level_Virtual.Level_Virtual:PersistentLevel.BP_TerritoryControlBase_C_UAID_E45E37FB55DACF4501_1154875607 using definition SmartObjectDefinition /Game/RoyalDivision/Features/Interactions/Capture/CaptureDefinition.CaptureDefinition.
something does seem off, but it's hard to tell what exactly without stepping through code. Sorry.
no worries, I really appreciate you taking time out of your day to chat
thanks for all of your work on this system & Mass!
Are you aware of any literature online detailing how to properly set up smart objects in World Partition such that they are registered properly into the subsystem & collection? I am just hitting Rebuild Collection on the SmartObjectCollection actor in the level. I wouldn't be surprised if I was skipping a step
I am aware of the commandlet
Not sure how I would be regenerating the list at runtime though to account for a smart object attached to a moving actor
Are you aware of any literature online detailing how to properly set up smart objects in World Partition
Like I said, it's not really supported, so.. no π
Right now moving smart objects are not supported. This will change, but it's another limitation of current design.
Ill take a look at how Lyra handles their capturable control points since that is effectively what I'm implementing
I'm building out a debug menu which shows what interactions are near a player, and I am currently using Smart Objects + UGameplayBehavior as the foundation for the interaction system
we are working on a "gameplay interactions" system that's an AI-independent extension of the SmartObjects concept, but it's very early in its development so don't hold your breath π
Awesome! I feel so fortunate to be able to look through the engine and sample project's source code to see how folks are going about these implementations. Not being in a big company anymore, I miss that ability to look through company wide repos to see how folks who are really knowledgeable about a specific use-case do their implementation. Using Unreal Engine gives me a bit of that with the source code being available.
I guess there's nothing stopping me from making multiple drivers for my implementation system (i.e. one using Smart Objects, another using a very lite home-grown system that gets me as far as I need to go until Smart Objects is feature complete)
I already have my own UMyCoolGameInteractionSubsystem which provides the standardized interaction API ontop of whatever the underlying foundation is, whether that be smart objects or something else
UnrealEngine's full source being publicly available is a huge boon for anyone interested in how stuff is done in the biz! It's also a real picture of large code base - deprecations, legacy stuff, stupid mistakes (it's just a matter of scale) and so forth. I wish it was the case when I started in the industry and had no idea how stuff really works under the hood.
It's been fun seeing the recent shift towards FSomeFeatureHandle and it being interacted with through USomeFeatureSubsystem in various new UE features
Yeah the navmesh is there, I should have posted the pictures...the event tick on the Player Controller is working and as far as I can there is nothing wrong with the Character BP.
vislog, what does it say?
the term escapes me sorry, I thought you were referring to the visual aid for previewing the navmesh. I'm opening the project now
I was unaware of the vislog @crystal hatch Thanks for that
not sure what it means though 'Start point not on navmesh'?
it should draw the relevant locations in the viewport. It means the system was unable to project the point to navmesh. So either no navmesh in that area, or the starting point was too high above the navmesh.
This is what I'm seeing for the navmesh...that's really confusing
I was standing in the center of the picture when it was doing that
@crystal hatch I may have messes with the Navmesh settings for the project...is there an easy way to reset those settings?
the easiest for me is going to DefaultEngine.ini and removing all the relevant bits (the classes I want to reset).
Ah alright I'll try that, I guess I could also open another project and just export from their and import to this one...you would think there would be a reset to default option
there might be, I just never used it π
Yeah I reset the settings I think but it didn't seem to change anything...unless that's a bug...anyway that didn't work
Fixed it
The Navmesh bugged out
that's all it was....yet another UE5.0 bug
I have no clue why it seems I keep coming across every UE5.0 bug in existence
if you change anything on the Navmesh settings in UE5 it seems likely it will bug out the Recaster
that I am assuming is the cause of the bug
if that's the case then it's an unknown bug. Have you tried debug drawing navmesh at runtime? Is your game Client-Server or standalone?
It's standalone, I didn't try debug drawing it at runtime...but I'm fairly sure it was a bug between the RecastNavMesh actor and the Project settings....this shouldn't surprise anyone considering the old one let you change the settings from the actual actor but doing so never worked.
They did change the RecastNavmesh actor in 5.0
Everything I have noticed so far that they have changed has one or more bug so far...I've literally not found one thing they changed that wasn't ate up with bugs
Can't wait for 5.1
I'll look into that debug drawing though at runtime, I've done it once but don't remember how. Thanks for introducing me to the Visual Logger.
this shouldn't surprise anyone considering the old one let you change the settings from the actual actor but doing so never worked.
This is a surprise to me since I've been changing local navmesh actor's properties for years now and it always works - only the agent-related properties are off limits, by design (and thus should be hidden in properties, I agree).
No, not really. Re bugs - I'd love to hear some details.
They removed the Navmesh options from it
Nevermind
I thought they did
lol
I never touch it anymore and I thought I checked and didn't see them. I know that in UE 4 changing it from there never worked so I must have assumed they were removed finally
It would but restarting would reset them
Maybe it's only meant for testing or perhaps the link between that and the project settings were never setup? Idk
Not true. The navmesh instance gets discarded only if it doesn't match declared SupportedAgents and these check only agent-related properties, so you can change other navmesh generation properties as much as you want.
Maybe I'm mistaken but I clearly remember changing them from the RecastNavmesh actor and it didn't work in UE4...I even remember spending days trying to figure out how to do it properly until I came across a video showing how to get around that by setting it from the Project Settings
whenever anyone reported that as a but it turned out they were messing around with agent properties π
but if you can't set that from there then why have it?
that's why I said that these specific ones should be hidden in instance's properties display.
when I was first learning about nav meshes that really threw me off...like I said I spent days trying to figure out how to do it
Oh right
I haven't touched them that often since then because I've been exploring other areas but I guess I'll have to refamiliarize myself again
Thanks for the talk and the info, appreciate it
np
Who here is the navmesh guru?
I'm working on a vision and influence mapping system, I wonder if I should piggyback on the navmesh instead of doing my own thing in parallel
Quick question, I'm implementing a drone companion for my character and want it to follow the character (among other things), would it be smart to add a Key to my blackboard with the player's location and constantly update the value in the AIControllers tick function?
Something tells me there must be a better way.
Nevermind, just answered my own question. I just update the location in a task of course.. Overthinking.
You should prefer having an AActor key and use MoveTo node by managing the state/flow of the behavior in BTs
I suggest using EQS for drone's positioning. In Bulletstorm we used EQS's predecessor to pick nice spots close to the edge of the screen so that the sidekicks were visible, but not obstructing the view.
is there a way to enable debugging or logging for navlinks?
I know the navlink line fails to draw if the navlink is invalid for some reason but I haven't figured out how to get it to tell me why the navlink is invalid
I didnt use navlinks so far but check visual logger
is there any thread safe way to project a point to navigation?
without accessing any type of UObject
I did it 
it just needs more love to stop creating weird curves like this but if I ignore this result looks like 1:1 to Death Stranding's method
I hate smart navlinks so much
I'm somewhat tempted to just add a sphere collision to the non-smart navlinks so I can get nav link started event without the bugginess
At that point it would be cheaper to use smart links. If you use C++, it's not buggy at all to use point links and nav areas.
I'm using c++
sometimes the smart links work sometimes they don't. sometimes they work and appear visually while debugging navigation sometimes they don't
sometimes they don't appear visually yet still work
Works perfectly
FVector SpawnLocation = FVector(0, 0, 0);
FRotator SpawnRotator = FRotator();
ANavLinkProxy* NavLink = GetWorld()->SpawnActor< ANavLinkProxy>(FallNavLink, SpawnLocation, SpawnRotator, SpawnParams);
NavLink->PointLinks.Empty();
FNavigationLink PointLink = FNavigationLink(GridPointArray[i], FoundPoint);
PointLink.Direction = ENavLinkDirection::LeftToRight;
NavLink->PointLinks.Add(PointLink);```
Only some of these links work and they aren't visualized by nav debugging
FVector SpawnLocation = FVector(0, 0, 0);
FRotator SpawnRotator = FRotator();
ANavLinkProxy* NavLink = GetWorld()->SpawnActor< ANavLinkProxy>(FallNavLink, SpawnLocation, SpawnRotator, SpawnParams);
NavLink->PointLinks.Empty();
NavLink->GetSmartLinkComp()->SetLinkData(GridPointArray[i], FoundPoint, ENavLinkDirection::LeftToRight);```
also works perfectly
FVector SpawnLocation = FVector(0, 0, 0);
FRotator SpawnRotator = FRotator();
ANavLink_Climb* NavLink = GetWorld()->SpawnActor< ANavLink_Climb>(ClimbNavLink, SpawnLocation, SpawnRotator, SpawnParams);
NavLink->GetSmartLinkComp()->SetLinkData(OutPoint, Start, ENavLinkDirection::LeftToRight);
NavLink->PointLinks.Empty();
NavLink->ClimbPoints = ClimbPoints;```
is there any way I can have my AI be stuck to a single axis via the blueprint chart? I've tried a lot but the AI doesn't respond to it. I've tried constrained to plane and blocking off the other axis with the volume modifier.
what do you mean? Navigation is constrained to the horizontal plane by default
oh you will want to make a custom ai movement system then
is that possible in BP?
no
Just create an actor component
Then start doing what you need to.
You will be starting from absolute scratch mind you.
So you won't have nav support out of the box.
You can do it in BP, but it 100% is not worth it.
Just pick up a little bit of C++ and then create what you need.
alright
All that said - I'm pretty sure the movement components can already restrict movement π€
There are settings here in the CharacterMovementComponent for example
It's also in the FloatingPawnMovement component
I have that enabled on the AI but he will just move a bit but then sit there
it's weird
How do you make your AI move? If youβre using pathfinding at all then thereβs your problem - the path probably isnβt restricted to your plane, so characterβs movement doesnβt match path following componentβs expectations, thus path following failure, thus stopping.
Your AI should be able to move if you just use βdirectβ movement commands (i.e. without using navigation).
Poll on visual node based no code ai development (as seen in unreal and unity for games) https://www.reddit.com/r/artificial/comments/ypye9v/how_many_of_you_would_use_a_drag_and_drop_visual/
8 votes and 10 comments so far on Reddit
I'm using the basic Navmesh. It seems to me you are right because that could be the reason. Do you mean just go into the BP itself and just write down movement commands? I just want the AI to roam about the one plane without moving one unit into the other and still doing the whole AI tree commands.
I believe you're mixing two concepts:
- picking where to move and
- moving there
Limiting movement plane will only influence point 2. But point 1 is where you need to start - if you pick points outside of the movement plain the move will always fail.
If you pick points in the plane you care about then you can just use Move Directly Toward BT task.
hmmm, so I need to pick the axis of where to move before I start to move there?
no, you need to pick move goal location that's on your desired movement plane.
looks good Eren!
Yeah, you mean like Azure AutoML? π
Hmm, whats the preferred way of capturing mic audio in unreal do you think? there's an onlinesubsystem for voip, but I dont need the online bit π
I think there was a new AudioCapture component in 5.0, maybe it can help?
Yeah, maybe thats the one.. I used that before.. but I don't really want to use a component for it.. cos I'm after doing some editor tools using it too
I guess I could look at how it works and just see if I can make it a subsystem
First, I'll have a go with FVoiceModule and see if that works
But with ability to make minute changes and export to python
There are a bunch of apps like that
I mean its a fair idea, just a lot of competition
anyone able to help me debug my Perception Component? It suddenly seems to have stopped firing OnPercptionUpdated events and I don't know why.
Controller constructor:
AIPerceptionComponent = CreateDefaultSubobject<UAIPerceptionComponent>("AIPerception");
UAISenseConfig_Sight* SightSenseConfig = CreateDefaultSubobject<UAISenseConfig_Sight>("AISense_Sight");
SightSenseConfig->PeripheralVisionAngleDegrees = 360.f;
SightSenseConfig->DetectionByAffiliation.bDetectEnemies = true;
SightSenseConfig->DetectionByAffiliation.bDetectNeutrals = true;
SightSenseConfig->DetectionByAffiliation.bDetectFriendlies = true;
SightSenseConfig->SightRadius = 5000.0f;
SightSenseConfig->LoseSightRadius = 7000.0f;
AIPerceptionComponent->ConfigureSense(*SightSenseConfig);
AIPerceptionComponent->SetDominantSense(*SightSenseConfig->GetSenseImplementation());
Controller PostInitializeComponents:
void AEFAIControllerCPP::PostInitializeComponents()
{
Super::PostInitializeComponents();
AIPerceptionComponent->OnPerceptionUpdated.AddUniqueDynamic(this, &AEFAIControllerCPP::OnPerceptionUpdated);
}
And the callback is now just
void AEFAIControllerCPP::OnPerceptionUpdated(const TArray<AActor*>& Actors)
{
for (AActor* Actor : Actors)
{
UE_LOG(LogTemp, Log, TEXT("Observed %s"), *Actor->GetName());
}
}```
It's definitely marked as a UFUNCTION:
UFUNCTION()
void OnPerceptionUpdated(const TArray<AActor*>& Actors);
Moreover I'm certain this used to work and have no idea why it has suddenly stopped...
It's like UAIPerceptionComponent::ProcessStimuli is never called... hm
I'm trying to make a, hopefully, basic behaviour tree. I followed a few guides but my "rotate to face BB entry" is getting stuck. Any tips for a guide?
whaaat, Senses Config is an empty array...? ->ConfigureSense(*SenseConfig) didn't throw any errors... even moving to beginplay keeps the array empty at runtime... ha
If I click the + on the Senses Config array, and then choose AI Sight config, it populates the sense with all the values I set in the constructor... π€·ββοΈ
(I changed 7000 to 8000 to double check that)
Wow... After searching for Sense config I found this: #cpp message
And so I tried renaming the components in CreateDefaultSubobject.... and it worked
Hi guys, anyone have any idea why the area underneath my AI model isnt working with navigation? he just gets stuck in this square when trying to move. i have deleted each aspect of the model and nothing seems to change. thankyou in advance
Disable "can ever affect navigation" on the character
and anything attached to the character
hi that is selected because i had the floor selected. it is off on the character
is there a weapon etc. that the character is holding? That could be blocking navigation as well.
i have gone down the list of what is included in the character, sword, shield etc and they all have that option turned off... strange
i have a feeling its the mesh but i cant see any options that would effect this
sorted
Hmm, I have a very simpel EQS query that just finds the character on a test map. Thing is, the grid points does not seem to work when the AI is in the air. Anyone know if there is a solution for this?
increase projection extent
Just started with EQS today and is quite new to game dev as a whole, where can I find projection extent?
Nevermind, it was the Pathfinding grid I tried with, that one seems to only work on groundlevel.
Make sure your character's bUseControllerRotationYaw is true
To be precise, it only works on navmesh.
Heyo, using BTs and AI Perception, is hearing sense the best way to implement a detection radius even for stationary actors?
Example: A patrolling ai wanders past a point of interest (a dead body) and stops to investigate the area.
Should I put a sound stimuli on the actor, or should I just use a collision box with event overlaps?
Hmm, would it be a problem if these things were always making sound? Perhaps a blueprint interface with box collision would be the smarter way...
if you want to detect dead bodies why don't you put a sight stimuli component on dead actors?
Ah, well I'm making a game where the primary antagonists are ghosts. While they randomly patrol they should be drawn to dead body actors, and if anything that's living enters a certain proximity radius they will aggro. What do you think would be a good way for them to detect things in such a scenario?
"Sensing life force" as the top priority sense, followed by sight.
I'm just not sure if using the sound stimuli would be the best way to implement proximity sensing.
well if they should be drawn to dead bodies during patrol and then attack player on sight I'd suggest to
- attract ghosts to dead bodies either by EQS queries OR put smart object components on dead bodies and utilize smart objects spatial lookup system
- do nothing with players since by default pawns have sight stimuli component implicitly added to them unless you disabled it manually or not using pawns for players at all
Thanks! I'll look into your suggestions and we'll see if I can work it out.
I'm using EQS, where the target location is picked from 25% best matches, which resolves in AI looking more believable.
The issue is with the path itself, where AI always tries to take the shortest route, meaning cutting sharp corners and hugging walls.
Is there a way how I can achieve more believable pathing with EQS system?
I'm trying to use MoveDirectlyTowards in my BT for my flying AI ACharacter. I've eneabled CanFly and set FlySpeed, but the AI won't move. I've also made sure TargetLocation has been set correctly. Is there something I'm missing here?
I've also tried with Gravity off for both StaticMesh and Capsule.
check if there's anything in vislog, might contain some clues
the log says the movement task is invalid. I'd check the output log for errors and or warnings. Also check the vislog for the same - easy to find since errors and warnings are marked on the timeline.
Some more details would be helpful, like which movement component are you using?
I solved it, I had added a StaticMesh to my character which I used just for a dummy cone, turns out that does not move, but my SkeletalMesh actually did.
Thank you though.
That helped a lot, thanks mate
For some reason my BT goes to Idle after one hit from combat, shouldn't it refresh combat selector as long as the target is in sight?
it does exactly what you told it π So double check your BTs logic (i.e. structure). VisLog helps a lot with that, since it can tell you step by step what happened and what was the state of the blackboard at that time (with a caveat that BB state is captured along with the very first log line in a given frame).
But I have it on "aborts lower prio" while blackboard/AI has a PlayerTarget, it doesn't make sense.
Do note that I'm very fresh to BTs. What is this "VisLog"? An external plugin?
But I have it on "aborts lower prio" while blackboard/AI has a PlayerTarget, it doesn't make sense.
But if the condition fails it will still go toIdle. It will also go toIdleif all the options underCombatfail.
VisLog is UE4/5's native AI and Gameplay debugging tool. My favorite way of summoning it is runningvislogconsole command. There's a way to open it form editor as well, but I never remember how.
has anyone ever created new custom flow nodes for the behavior tree?
if you mean composites, i tried
its pretty easy to do unless you want multiple outputs
i lost my sanity after trying to understand how simple parallel implements two output pins
That implies you had some sanity to begin with
Be careful making composites, it can get violent
π
How can i set a blackboard value when AI sees a player and unset it when AI doesnt see the player anymore?
so weird scenario
I've got a different nav meshes at different altitudes
and the pathfinding seems to think a path teleporting from the lower nav mesh to the upper nav mesh from points A to B is legal
If you are using the perception component, you can bind to on perception updated. You can also use the EQS if you have more than 1 possible target.
If i use the perception updated, where should i unset the blackboard value to tell the behavior tree that AI doesnt see the player anymore
You can bind to OnTargetUpdated when you first see it. However on perception updated should also be called when sight is lost.
I did use target updated before, but i do not know where to put in the unset blackboard value
You can call Clear blackboard if successfully sensed is false
Heyo, How do I make sure my ai controller is not sensing noises that it is making itself? I mean that in an instance specific way. The problem occurs at that third branch node.
In this an example, a mob of ghosts is making noise that will aggro other ghosts they pass while chasing the player.
When AI picks a path with EQS, can I somehow get the nodes in this path and make them more expensive to travel, so that other AIs will have lower chance to pick the same/similar path?
Not without a lot of C++
You want to check if the sensed actor is not the pawn. Self is likely the controller, especially based on your comment.
I see, well then randomly spawning more expensive nav areas at AI location when he is moving to the target will have to do π . Not sure about other approach to make AI's pathing more believable and not always the same/the shortest path to the target.
That's a really bad idea. It's better to use avoidance and adjust the destination.
I was using RVOAvoidance and loved it, the issue was that its not really usable in multiplayer game, because clients were receiving huge amount of network corrections
For AI's Hearing Sense, do AI's standing closer to the Noise Event Location process it before the ones further away?
I want to make sure that only the closest AI will handle the Noise Event.
I could wait one frame and check every AI that registered that noise and then compare the distance and let the closest react, but if there is an easier way I take it ^^
π```c
class AIMODULE_API UAISense_Hearing : public UAISense
{
/** Defaults to 0 to have instant notification. Setting to > 0 will result in delaying
* when AI hears the sound based on the distance from the source */
UPROPERTY(config)
float SpeedOfSoundSq;
there is indeed a distance-based delay for hearing stumuli, but it will be eventually received by all the listeners within effective range. You'll need to add some ticketing system to have only the first one react to the stimulus.
I'm on it π Thanks MieszkoZ
why do I no longer see EQS items scores on the spheres when I enable AI visual debugging (apostrophe). It was working in UE4.26 but it seems that by default it doesnt work in UE5.03. I can still see the scores in the query details table by pressing '/' but I'd really like to see scores on the items themselves
Good morning everyone ! I have a project where I have 50-100 AI moving around in the scene, I did all the optimization I could possibly think of, except one and it seems to be the biggest memory eater : characterMovement. I am using the default component from unreal, I know I already read that it does take a lot of ressources. I was looking for other alternatives but could not find ressources on doing specifically this for AI, and everything it could include like getting NAV path from navmesh etc. Where could I start? Do you know any ressources / documentation to implement this ?
Thank you !! 
Have you used the profiler/insights to verify that character movement is your issue
Only tests I did was running the stat character command in the game, Nd disabling on command the movement of on AI at runtime. When I do the char movement goes to normal ( 1 call per AI), but when I activate it back it goes crazy for all AIs
hello, by enabling the "Do Fully Async Nav data gathering" would that also update the navmesh async at runtime or that is just for the building of the navmesh at design time?
With Move To Location I can set Filter Class dynamically via variable, but when using Behavior Tree's Move To node, I can only set this filter manually, I don't see an option to use a variable, that I can later change, so that AI is using different nav filters from time to time.
you can either inherit from UBTTask_MoveTo in c++ and listen for blackboard keys and update your filter class when its changed and recall MoveTo() or create a BP and use MoveTo node task and work with delegates + service
I've never seen this. How many AIs do you have bumping into each other? Regenerating nav mesh for a moving character is going to be incredibly expensive. It also invalidates paths, so you'll be repathing a lot.
Could you please elaborate more with the latter option? I'm not sure if I understand.
Well basically I have a Character that can be both player and an AI, and inside CMC I set up to use RVOAvoidance, on server I loved how it worked, exactly what I needed, but then when I tried using it on client, I couldn't even move forward without getting rubber banded right back, like the client doesn't even care about RVOAvoidance radius and server is sending him back because he is colliding with his own radius or I have no idea. Then each time client hit other AI, he once again completely ignored this RVOAvoidance radius, going right through the AI, but then server started heavily correcting him because he should've been "pushed" to the side.
so MoveTo node in BPs and BTTask version of MoveTo is almost identical, only difference is in BT graph you are not able to edit the non blackboad values to change the state of the current move to task. If you create a new BTTask and use BP MoveTo node inside of it, you can use delegates to notify your BTTask and re-trigger the MoveTo with new params you provided
Oo now I understand, okey if MoveTo inside BP is almost identical to BTTTask version, I will just use the BP's one, thanks a lot!
yeah only difference is one of them is able to listen BB values other one is not
Because the server is the authority for server owned actors. Does RVO not work for the server and correct on the clients? You might get better results with crowd following.
RVO works on the server, doesn't seem to be working on clients, that's why they're getting spammed with corrections.
Crowd Following is one of the new UE5 features? Trying to google it but there doesn't seem to be much info
I mean, having RVO on the server and not on the client. Letting the server control the movement.
No. It's been around for a long time
how RVO even works in client anyway? 
client's laggy movement can cause some distortions in avoidance and it might look weird in client
Ooh it's the Detour Crowd? Because if so, I was playing with it, but the jittery movement was really bad
It was pretty much unplayable from the client's side
with how much ping you tested?
I tested it on both decent hardware and net connection all the way to the very poor hardware and garbage internet connection, ping around 500, at that point it was a circus π
500 is "huge"
its only to test critical features
it takes half of a second to arrive the information to client
ofc it will look bad π
some games use lockstep networking which UE doesnt support, when client goes out of sync it continues to simulate the world with the last info it received
in client-server architecture you have different advantages and disadvantages
A ping of 500, all movement is going to look terrible.
well with CMC it's actually not bad at all, only the RVO was doing ruckus
does anyone know an elegant solution to AI listening for both pawns and distant sounds? I've been using the pawn sensing component on my AI as well as a pawn noise emitter on my main character, but it feels like it's only good for pawns with noise emitters and not regular sounds. been trying to look into something consistent but haven't had any luck
ideally the same component should be listening for both pawn footsteps/sounds as well as distant sounds in 3d space
I've got a different nav meshes at different altitudes
and the pathfinding seems to think a path teleporting from the lower nav mesh to the upper nav mesh from points A to B is legal
What could be causing this?
Happened to me before with nav projection extent if dest was on the mesh above the lower mesh. I think default extent is in project settings but you can override it at many places. Iirc also projection in character movement comp was causing the char to incorrectly switch between these. But if this us happening mid path (not near path start/end) then I am not sure. Maybe check vislog / gameplay debugger.
Default Query Extent
try to lower Z
and delete your RecastNavMesh actor and rebuild navigation again
didn't help
what would I even be looking for in the viz log
well the current solutino is just making those areas not part of the navmesh
which sucks but there doesn't seem to be any alternatives
also this comment makes it seem like query extent is the agent size
The pawn sensing component is old, recommend switching to the perception component where anything can report a sound.
Is that the actual path or do you allow partial paths? Check the vis log to actually see the path it is finding.
thanks. that saved me some of my remaining sanity
You're welcome. Partial paths is turned on by default and always causes odd behavior.
Hi, I'm trying to brainstorm a solution. I have points an AI can run to using EQS (cover points), and I'm trying to filter out any points that would result in the AI running past a context (their target). I want them to pick the furthest cover point from the target which is fine, but sometimes that results in them running right at the target which isn't really "running to hide" behavior.
Just drew up an example: it's scoring the green box lower because it's not as far from the target as the red box, but the red box should be disqualified because it means running past the target. Not sure how I could check for that reliably.
Maybe just disqualify any that are in the direction of the context +- 90 degrees? Wouldn't be totally reliable but would at least reduce the amount of times this happens. Would still like a solution that essentially checks if the pathfinder path to the item goes "near" the context.
you could try either
- create your custom test that takes the target player as the context and filters out items in angle range [- X degrees + PlayerRotation; + X degrees + PlayerRotation]
- add an extra distance test but this time between an item and the player and make a negative score for this test so that it drags down the score of items which are closer to the player
or try using both of them
Correct me if I'm misunderstanding you here, but 1. just sounds like my suggestion under the picture? and 2. sounds like what i'm already doing (closer to target = less score, farther from target = higher score)
- doesn't work on its own because if the farthest point from the target is way behind them, then the AI would have to run past the target to get to it and that doesn't make sense.
adding 1. in conjunction with 2. would filter out those points^, and ensure the AI always runs away from the target, but it would prevent the AI from considering cover points which are between them and the target. Here's an example of a situation where using an angle to the target would disqualify totally valid cover points.
"most viable" is no longer allowed because it's within the angle which is meant to disqualify that "furthest point".
If there were cover points behind the AI, to the left of the image, then he'd go there and that's fine. If there weren't, then he just wouldn't take cover. So it's not a perfect solution but this is the only one I have.
Maybe only disqualify items in that V which are further from the AI than the target is?
is the black circle here is NPC? if so, are those green lines are angle filtering? are you filtering by the npc's field of view?
Yes the black circle would be the NPC. I'd be filtering by direction from NPC to Target, with an FOV of like, nearly 180 degrees (-90 to +90)
but why don't you want to filter out items that are in the field of view of the player if you want to make an NPC avoid players FOV?
oh right
because some item can be out of the players FOV but still an npc would have to run through the player
That's not what I'm trying to do.
I'm trying to make the NPC run somewhere "deeper" into the location and hide in ambush. It gets all possible ambush points in a radius around itself, then determines the best place to hide.
The checks are:
- Cover point is not in use
- Cover point would not be "exposed" to the target should they come towards it (no parallel covers) : i.e if the cover point is opposing +X, the target must be on the +X side of it
- Cannot be in line of sight to the target
- Prefer the cover point which has the furthest path from the target
- Is a reachable point via pathfinding for the NPC
So yes, the furthest ambush point from the target (which is also an opposing-facing cover point) could be "behind" the target - requiring the AI to run past the target in order to go and hide.
you've got me interested. I'll try to draft something on an empty project out of my own curiosity
besides, I might be doing my own cover system for AI some time soon
I'm thinking about making a test which generates a nav path to the item, then loops through the points in the path and checks if the points "pass" the target relative to the NPC (or get closer in distance to the target).
i believe the answer might be easier
I mean a sphere trace toward the item could be OK. If it hits the context/target it's a bad item. Would be iffy in weirdly shaped corridors though and adds cost.
Ohh...maybe I could generate a path to the item, get the first point in the path that's further than the target is, and check if the direction from the NPC to that next point is within like 180 degrees of the direction from the NPC to the target? If so, then disqualify it because it's requesting the NPC runs "toward" the target **and **"farther" than it - which would sort of indicate "passing" it wouldnt it?
Complicated but seems not terrible. NPC breaks out of "run and hide" sequence if they get within combat range anyway so player would be none the wiser that it was a failed sequence. I'm open to an easier solution though π
How and where are you going to generate path from npc to best cover point in eqs items?
idk id just code a new test in c++ to do it
i have a custom pathfinding component on all npcs that i can request to make a temporary path very easily
hmm, have you thought of doing that with 2 eqs queries? one to find the best spot, second is to find the best proxy point to reach it avoiding target's FoV?
perhaps the second query might be fired in a service while running BTTask_MoveTo cover
because the player might be looking around and stuff
well it's not related to the fov of the target/what the target can see.
the target could be turned around/not looking at the AI and they'll still think "oh shit someone's here i'd better run deeper into the tunnels and hide around a corner"
im gonna try my method i mentioned above later
well if you don't consider player's FoV while an npc is getting to the cover player might change its position and rotation and that cover won't longer be viable
wouldn't it?
Its supposed to work like hide n go seek/tag. You are spotted, they run off to hide, if you catch up to them before they get to their hiding position yes they will cancel and face you. if you dont, they will try to surprise you.
I have a behavior tree node checking self visibility against the target's pos and fov yes, thats how you can force a cancel (by chasing them).
But the method of choosing isnt related to if the target can or cannot see it. It's filtered by trace from target's location to the cover point- so even if they arent facing a cover point it will disqualify points that are "in the open" so to speak
Oh I see what you mean. There's also already a Behavior Tree node that checks if the currently occupied cover point is visible by a target which is currently visible by the NPC, and it will leave said position and either engage or move accordingly or cancel moving to it or something. Yeah.
but that's sorta beyond what im talking about which is simply just considering the initial cover position and how to not move PAST the target
rather, to not consider at all, any cover positions which are beyond the target
hmm, considering your gameplay requirements one other thing I'm thinking right now is to make an eqs test that should be placed final and it should test each remaining eqs points from best to worst in the following manner: cast a cone-like shape from the player (like player's fov) and then do a shape sweep by object channel from the querier to that item and if it overlaps player's fov cone then this point is invalid. But I feel like it's only going to work in a simple and flat level geometry π€
and I have no idea how to cast a single-use shape of such form like that from the player. perhaps make it a collision component attached to the player π€
you could do all that with some simple vector math/dot product
then acos degree and check against the target's fov (is less than?)
but that's not really related to the issue because like i said all points that are in line of sight to the target (whether or not they're actually looking towards it) are disqualified anyway. the player looking toward the point is irrelevant since it's already confirmed to not be within line of sight.
and if you dont do that line trace, and just do what you said, AI will avoid all points the player is facing even if he can't see them. so it's a moot check regardless
but what about points that are out of players fov but getting to that point would require the npc to enter player's fov? those are not discarded are they? this is where that test I thought of comes into play. like ok you've got a good point outside of players fov but would getting to it require you to cross players fov?
i dont care about that. it's a horror game so seeing something run through your LoS that you didn't even notice before as it disappears running down a hallway is cool
then it seems I failed to understand what you actually need π
yeah i know lol
i thought i was helping you lol
since i already solved my problem when i said i will get the intended path to the "winning" cover position, and ask if its points indicate movement toward and beyond the target. if so then disqualify it and go to the next "winning" position and do the same test.
Does anyone have any basic wisdom on using the new state tree as the basis for my AI vs of I should stick with behavior trees?
Probably depends how brave you are π
Its still being worked on afaik, so you know..
just a btw but this worked. just finished programming it. ai won't go to a cover point (only test the winning ones!) if the path to get there has 2 points one after another, the first being closer to the AI than the target is, the next being further than the target, and the direction from the closer point to the further point is within +-90 degrees of the direction from the closer point to the target. indicating that we're likely "passing" the target at some point during that path, which is no bueno.
What you want is the dot product with a filter. Dot of target to querier and target to item. I'd recommend turning off all other tests and using the visual logger to get the correct settings. Significantly cheaper than checking path points.
hey can i get someone to help set up my roaming Ai, finally got time to do it
bruh
Does anybody know of any Unreal games that ship with the ability for players to make their own AI?
best thing comes to my mind that is any UE game has modding support?
That is what I feared π
I couldn't find anything that let players use a scripting language or something in a way that didn't involve downloading a whole dveeloper kit of some kind.
there is a 3rd party open source Lua plugin that I can recommend
or if you trust Epic enough, wait for Verse π
That sounds like a good start! +1 for nostalgia, too π
Heyo,
What type of code should be handled by the ai_controller?
So far, I've mostly used it for interpreting perception data and altering BB keys. Am I missing something? Let me know what you guys use it for so I don't stay a confused ignorant noob.
Best thing about it, in your case, it has slate/widget classes that lets you create widgets runtime and players can write lua code and even get syntax highlighting
so you can just create an empty map and spawn that widget and let people run their lua code
your only problem will be designing your codebase properly to expose things to users
Controllers are identity of "players" or "bots", AI controller is something designed with the mindset of "bots should be treated as players" from Unreal Tournament times
You can handle any logic in AIControllers that is specifically related with AIs if it doesnt fit to other things
Right. I've just noticed that there seems to be overlap between what you can do in the ai controller and on the behavior tree. I know the controller runs the behavior tree, but if I can make something in the behavior tree using tasks and services should I prioritize that? Am I wrong?
exactly, though AIController runs BT through "behaviortreecomponent"
it just has a helper function to spawn it and init
you can slap that comp to any actor and run your BT without controller
"bots should be treated as players"
this mindset is a tech debt tbh, btw π
Writing lua code with highlighting and everything sounds perfect.
It seems the behavior tree is the most important factor here and I should double down on it huh?
Or I should just do it dirty cause rent is coming up.
if your goal is to get familiar with UE AI framework yeah start with %100 getting the grasp of BTs, then you'll end up with questions of "how to implement X in best way, should I do it in bt graph or use tasks or any other solution" etc -- then you'll need to read source to develop an approach to solving common problems
also there are people who are very experienced and some of them even working on AAA games, so you wont have difficult times reaching information, especially if its UE framework related
Using subtrees help to decouple logic from a single tree
Does someone know how to set up the navigation so that you can create a rts?
My units are moving weird and pretty much shaking all the time, like they decide to move left or right every frame.
I've followed the tutorial in the documentation to avoidance to setup my units and their controller.
Also they won't stop moving, when they have reached their destination because they want to stand all on the exact point. I'm not sure if I need to create a different point for every unit, but I don't really want to create a formation. Something like in SC2 would be preferred, but maybe they also calculate the position they need to go. Also I never was able to "allow" units to push other ones away
how many pawns you are aiming to reach?
you mean how many at a time to control?
yeah, there is detour crowd manager thing in Unreal Engine, that gives you avoidance, but it doesnt scale well
like they decide to move left or right every frame.
this smells RVO avoidance, which doesnt work well as detour crowd
on my current test, i've controled like 4 to 6 units
if you want your pawns to keep their formation while they are moving thats a lot of work
UE doesnt provide that out of the box
I don't really need that π
then I think you can just use EQS to create formation at move goal and use detour crowd
I'm using RVO with the detour... as told in the tutorial right from unreal. They don't go well together?
yeah they dont
use detour only
though I also thought they go well together but another very experienced person here warned me about it a while ago
ohh btw. I'm sorry. I just realized I completely misread your question
i thought you want formations
but anyway yeah your current issue seems to be related with the params you are using with detour crowd and RVO
navmesh itself shouldnt be a problem
also detour crowd has a limitation like target movement goal should be at max. 256 poly distance is navmesh -- based on it's source code
check this out
I can't really believe, that this is the default way, unreal ships their ai navigation
that's not the expected behavior
so lets start with obvious ones
1- are you using detour crowd path following component in your AIController?
2- are all AIs registered to detour crowd manager?
3- have you tried tweaking params in project settings for avoidance?
Does the Nav mesh look correct? That's while playing
no, agents shouldnt block navmesh
ARTSPawnAIController::ARTSPawnAIController(const FObjectInitializer& ObjectInitializer): Super(ObjectInitializer.SetDefaultSubobjectClass<UCrowdFollowingComponent>(TEXT("PathFollowingComponent"))) { }
2: I'm not sure what that means. all units have the same controller class
3: yes
can you try printing SimulationState on your detour path following comp, to ensure its set to Enabled
how? π
get your pathfollowing component in aicontroller, cast it to UCrowdFollowingComponent, then use IsCrowdSimulationEnabled()
it will return true if its set to Enabled
on begin play?
yeah
gotta leave for a while, might not be able to answer soon, but let me know with the result
I'm going to bed shortly π can continue tomorrow. thanks so far
is enabled
I explained why only doing a dot isn't reliable because it filters out items that are toward the context/target, even if they would otherwise be valid in terms of level layout (dont require going past the target), and doesn't take into account items which might be out of the dot angle (even if it's like 180 degrees) but still require running past the target to get to (like a U shaped hallway).
Labyrinthine level design sort of necessitates path check i think.. so unless you're telling me checking path points on 2-3 items once per encounter is game breakingly expensive i'll stick with it
In the example you gave, it would pick the green one using the dot product with the settings I gave you. It doesn't filter out the ones towards the target, it filters out ones on the other side of it.
ah i misread your message. dot from the target
Do your targets not move? Because you'd have to update cover points to handle movement.
If your targets move, then the cover points will need to be updated if they are no longer valid. So you aren't just checking it 2-3 times per encounter.
AI spots a target, picks the furthest possible place to hide from that target doesn't doesn't necessitate running past said target, then runs and hides.
if the target catches up or otherwise takes their focus off running and hiding, the run and hide behavior is abandoned. if they successfully run and hide, they stay there until they are counter-ambushed/attacked/provoked, or their target walks up to their "surprise bitch!" hitzone, at which point they pop out from cover and swing at the target.
there's only one attempt to run and hide in an entire encounter.
think Condemned, when enemies spot you they run behind a pillar or something until combat starts
so no, cover point validity is only considered at the very start of a possible encounter in the game mechanics.
after that the ai relies on whether or not they're in danger based on their own real position (on the way to a hiding spot, or in position at one, either way), target distance, target threat level, target behavior, other threats in the area, sounds, etc.
For an RTS, it's usually best to calculate a goal formation at the time of the movement command.
anyway here's why just using a dot to disqualify all behind the target won't work for any interesting map designs. correct me if im wrong:
The second furtherest should win based on distance to the querier, or the path length that you are using.
i want the querier to always run to the furthest (path length) point from the target
checking in a fairly large radius
so i dont see how the closer one would win, since the scoring is based on how far from the target they are.
I think I can't create a satisfying algorithm. What if you move 2 groups to the same spot? What if there is an obstacle moving into the goal-location?
So many things to react to..
if there are already units in the place you are moving, you make them move to open space. if they are both moving to an empty space you leave it up to avoidance algorithm
why isn't there a thing provided from ue?π€
what do you expect exactly? there are already two avoidance systems you can use
I don't know... Either there is not enough information or they don't work for me
and AIModule is mostly abstract, other than "necessary" stuff to call it an "ai framework" - so there are many missing things especially if you are working on an RTS
detour crowd works for me, there is something weird happening on your side about yesterday's problem
Nice. AI always felt so far away for me
some studios rely on 3rd party frameworks
some develop everything from zero.. by wasting 6 months minimum
if you got the money, you can buy stuff
yeah, even for an indie you go through some initial boilerplate stuff to build up some AI if you need a little bit more than what UE provides when it comes to #gameplay-ai
so its normal to feel some absence of necessary things in AI module
I feel overwhelmed by AI
I need to create the player AI and I don't know how to build that up
you can try going through pinned messages, there are some useful links about both philosophical approach to AI design and UE framework
Gonna chew through that
high level approach to AI design is basic, having core functionalities in a shared base class and letting different systems manipulate it. so both BTs and Player systems can drive movement, make weapons shoot, trigger abilities etc.
AI part just requires some additional tools to "make decisions", and behavior tree is most common one. its useful to prioritize behaviors, meanwhile there are also other tools like finite state machines, GOAP editors, utility systems (which go well with BTs)
each tool introduces a different workflow, once you get the workflow and set-up your system modular and reusable as possible it becomes very easy to design things
I've created a GOAP from a tutorial π
I dont't understand the algorithm but I'm fine with that
never worked with GOAP, but i keep heard its mostly overkill for many situations from the people used it
definitely has its place though
We planned to use it in our story game, but we changed it to a scripted approach using the Flow plugin
So the big reason to set the formation on the move action is exactly so that you can label individual spots as taken for future move actions with other units. This becomes more important in networked RTS games where deterministic commands become more important.
If you're making a single player RTS it doesn't matter as much, though.
Is there no open source RTS AI framework for UE? I should see if I can make a plugin from some of my work in it π€
There is one, but it's not maintained and it feels very overly complicated to use. I've build my own upon this and changed the combat system to use the Gameplayabilities.
Sounds like I can learn a lot from you
Throw up a link to it?
I did some work on an RTS a while back. And by a while back I mean like 2014.
Yoooo it's Nick!
Very cool!
I think highly of myself, but I probably won't have anything that beats this knowing who did it π
Which parts do you find complicated?
The fact, that every feature has its own component seems a little off to me. I'd rather merge some of these together. From a designer perspective, you don't want to switch to every component and make changes. Name, Icon and description can be placed perfectly into a single component.
The Fog of war is ok for a free to use plugin but I think it's hard to change
And sadly he has no time for it so it's kind of spoiling. Not working in UE5 for example. The AI BT Nodes are created in Blueprints which I moved to c++
Looks like there's a UE5 branch.
I'm going to download this and give it a go later!
Which was updated 7 months ago π
So that's newer than my approach
It's a good start though
And he's from germany so it makes me a bit proud π
How far along are you in your game?
not very far. I'm struggling with the unit control
Just reading the code, the camera looks pretty rudimentary. One quick "win" might be to look at the universal camera and integrate that. It's free this month, I think.
AI is obviously the focus here, though.
I really like the approach on the Lyra Game for "Experience", where you can easily create different game modes.
But it's hard to "free" it from the rest
Whenever there's new free stuff, I'm collecting it, so I'm sure i got that
I'll take more of a look when I get back to a computer! I was planning to make a miniature RTS myself this coming week, so I'll run into the same problem as you, I think.
The universal camera looks interesting
is there a particular reason a behavior tree doesnt run even tho run behavior tree is running in th ai controller
and when i look in the tree it not even showing it being ran
though the variable is being updated
never mind it didnt like nothing was in it even tho i had a service in it
There's also an RTS thingy by an AAA developer where they open sourced their abilities system.. can't remember the company name though
Dontnod? something like that
Daedelic
There's a video from Unrealfest Europe 2019
And Nick also contributed
Nick?
Nick Pruehs
I'm creating a simple realtime autobattler and have been using Behaviour trees but as I scale i'm starting to wonder if I should be using something else like the StateTree system.
My AI just needs to essentially attack move but scaling above 1-200 and my performance is sttuggling
Does anyone know if we can till what the AI is navigating toward currently? Iβm trying to disable RVO avoidance if the AI is navigating to a navlink because they keep cluttering up if multiple AIs go after 1 navlink and none of them reach it because of RVO avoidance
what is the recommended approach for setting up a large enemy mech AI ? O_O
dependsβ’οΈ
but seems like modular AI for pieces would be a good idea, like how Alien Isolation used two AIs for the Alien. one for body and one for head, and a shared memory (blackboard) between them
sorry, by setting up I mean like , should I be using the Character class and scale up the Capsule? right now as it is, the navigation is not taking the mesh size into account
are you not using a character currently?
Isn't a UGameInstanceSubsystem meant to auto-register? it appears that inheriting from it doesn't actually instantiate it

