#gameplay-ai
1 messages · Page 30 of 1
Trying to create a new context type for EQS. I am printing the correct value, but it doesn't seem to be getting used by EQS. I'm drawing a circle around the context. Even though a different vector gets printed, the items are always generated around 0,0,0.
The context is aimed to be the last sensed location of the player. Overall goal is to investigate a "likely" area that the player went to after losing sight, with the last sense location being the starting point. I tried to copy the way the querier context did it, but it didn't work out the same. The UEnvQueryItemType_Vector is my custom class as well, that I modeled after the UEnvQueryItemType_Actor from the engine (there is only a vector base by default)
void UEnvQueryContext_SensedLocation::ProvideContext(FEnvQueryInstance& QueryInstance, FEnvQueryContextData& ContextData) const
{
AActor* queryActor = Cast<AActor>(QueryInstance.Owner.Get());
auto* controller = UAIBlueprintHelperLibrary::GetAIController(queryActor);
auto targetLocation = controller->GetBlackboardComponent()->GetValue<UBlackboardKeyType_Vector>(FName("TargetLocation"));
PRINT_TO_SCREEN(2, "%s", *targetLocation.ToString())
UEnvQueryItemType_Vector::SetContextHelper(ContextData, targetLocation);
}
void UEnvQueryItemType_Vector::SetContextHelper(FEnvQueryContextData& contextData, FVector location)
{
contextData.ValueType = UEnvQueryItemType_Vector::StaticClass();
contextData.NumValues = 1;
contextData.RawData.SetNumUninitialized(sizeof(location));
SetValueInMemory<FVector>(contextData.RawData.GetData(), location);
}
// this is a protected static function in the base class "UEnvQueryItemType"
/** helper function for writing typed data to memory block */
template<typename T>
static void SetValueInMemory(uint8* MemoryBlock, const T& Value)
{
*((T*)MemoryBlock) = Value;
}
The PRINT_TO_SCREEN macro is printing the correct value, but the items are only being generated around 0, 0, 0
what do i do if pet movement is choppy when following main pawn
the ai move to node is failing every so often i think and its stopping the pet making it look like its freezing while walking to main pawn
You don't need to make your own item type and it's likely what is causing you problems. Just use one of the built in ones.
Also don't make me throw the book at you for not checking pointers and overusing auto.
Set use acceleration for paths to true in the movement component. It will smooth out the movement. You also should debug why the move to is failing. I recommend to use the visual logger as the BT and pathfinding is set up to be logged there.
just added it to a spring arm instead
Are there any indepth guides about best practices for setting up nav mesh generation that goes into things at a c++ level?
Hello There can someone here help me please ? I have in my game AI_Control make by Ryan Laley videos and everything is good perfect worked and so. But two days back i must reinstal whole my pc and when I have import my game back that NPC doesnt work .... they have just shake and on Behavior tree is show they have targets they have work to do but they dont movin and i dont know why .... can anyone help me please ? what i forgot or where i make fault ? thanks u very much
I don't check pointers when I'm doing prototype code. Just want to get stuff working and then go back and clean it up.
I figured that would be where I'm failing, but unsure how I would set the value memory with a vector, because it is a protected function. And that is how the querier one appears to save the actor (also notice how I hardcode the BB key name 😛)
Hmm - looks like maybe it is UEnvQueryItemType_Point
Of course I just needed some sleep.
Yup - works now. Thanks Luthage! (Again, just prototype stuff. Just tryin' to get it to work)
Go to Tools -> Debug -> Visual Logger and see if you can find out why your moves are failing.
I am having a problem with an AI Character who is on a patrol route at a speed that makes it seem like he is jogging. Problem is when he gets too far from the player, he stops being rendered and he obviously doesn't start moving again until the player gets close enough again. How do I make it so he follows the route correctly, even when he is too far?
I have a couple animals for AI and they need to find food and each one has a different food to find, should I be creating different EQS and BTs for each of them or is there another way of doing this?
(this is not related to yesterday's shenanigan btw, whoever might remember)
I am thinking of creating a base food class and then have the animals search for them but that will result in each of them being able to find others' food
🤔 all I can think of is have your EQS return All Matching and have a task that calls a CheckFood function on the parent animal, which each child overrides with a diff food type. If wrong food type, run the EQS again until it finds the right one. But I feel like that might keep giving you the same initial match each time, idk 😬 . I'm sure there are better ways
btw this solution may require GameplayTags
oh boy
I'm sure Luthage or someone else can prly give you a much simpler solution
I don't know what they are, lemme look up the docs
I will wait for a bit then
they require a tiny bit of cpp to expose them to bp 😅
why must everything be so complicated
did in my case
You create them in the project settings
And there are BP functions to do what you need to do with 'em
that wasn't my problem
I wonder if Mathew's 6 year old video on gameplay tags is still applicable
Yes
🤷 I had problems adding them in bp only, and everything I could find out there said you need to expose them via cpp if you want them to work properly
nice then
It's a file
I know that man jeez
I'm not talking about the container
but hey if you didn't have any issues with them in bp only, great
If you are running into issues adding them in the project settings, that is 1000% a bug
Because that was the original way you were advised to add them to a project
And there was a macro you'd use to get them in C++
talking about stuff like this not working properly when I tried it
but making the actual base classes expose them fixed it for me so idk
That's something completely different than adding/removing them in the project settings 😅
basically using the Interface was problematic without cpp
well you kept going that route lol
I nvr said anything about adding/removing to the file
Either way - EQS is the right solution here
but how do you make it return the next match if you do all matching?
If you know a bit of C++, you can write an EQS test that checks if the food is valid for the querier.
If not, then you need separate EQS queries. You can share the BT and put the EQS Query into a blackboard key.
you mean the result or the actual query?
I don't know C++ so this means I'll need to make separate EQS and put them on a selector in the BT?
wait I can put queries as a blackboard key?
No. You put the EQS Query into a blackboard key and when you run the EQS in the BT you use the BB key and not hard set to query to use
got it, I'll try that
I had no idea you could do that lol
me either
what's the object type tho?
It's an object key type and the class is env query
btw neo i scrapped everything from yesterday because there were a few things i did wrong and now I am thinking of trying to make a simple ecosystem
I knoww, I felt so bad scrapping it
pretty much
that's so elegant 🙂
all good, learning xp is not wasted
so you'd just dynamically run something like this, where you change the default value of the EQSQuery in each class as needed?
Yep
Nice, thx!
is that a task or a controller?
sry, one more question re: what you mentioned yesterday about running EQS as a Task instead of a service and just having a service that updates the location while target is set. I tested it in my game, and if I do that, when the Target moves out of range, the BB never updates that key, so it will track the same target indefinitely. Nvm switching between targets based on range. So in my case, I would be better off keeping it as a service right?
It didn't rly make sense to put it in a task, so I was putting that on the begin play of my AI Controller
gotcha
but realistically, since you want your ObjectValue to be a var on your BP_Hippo, I would instead do getAIController from your Hippo and run the code off that
also I had renamed that var to EQSTemplate but I guess I didn't update the clipboard
I am creating a task that will update the EQS query of each animal
There should be an option to clear the BB key on failure. It might be in the config.
and I'll create child tasks to set the individual queries
if you mean this, I have it checked:
Unless that changes during runtime, you really shouldn't put it in a task
so I should create seperate child controllers for each animal?
nope
I would create separate data assets for each type and put any data that is different in there.
I don't know anything about data assets
Data assets are data only objects.
I see
What is a Data Asset in Unreal Engine 4.
Followup video showing how use Blueprints Only for Data Assets using the Primary Data Asset type: https://youtu.be/hcwo5m8E_1o
Source Files: https://github.com/MWadstein/UnrealEngineProjects/tree/CPP-Examples
Note: You will need to be logged into your Epic approved GitHub account to access these exampl...
thanks, I'll check it out
so I'll need C++?
oh nvm I can find it in BPs
new to UE5 I think
It was also a thing in UE4
Its just like a regular BP but editor doesnt provide a graph to place blueprints
You should create base class like how you create another class and then derivatives should use Misc -> Data Asset option instead of creating a new class
I have a general idea of data assets now; I'll need to create seperate EQS for each animal?
That depends on your game. Does each animal have their own food types or is it broken down differently?
every animal has their own food type
just a quick sanity check.
- player pawn has an AI perception stimulus with both sight and hearing.
- NPC ai controller has perception with both sight and hearing and a max range of 50m
npcs find their food just fine. but they don't seem to ever notice the player
Is the player a child of Dusty?
dusty is the player pawn
Kk
but it should still work, even if they're unpossessed, right?
not according to the debug overlay, no
but it's supposed to be set in that eqs query
one sec I'll post the query
and on Dusty_PhysicsPawn
Open those indices
oh right sec
that's on the stimulus source
oh, i've got it on the AI controller
my mistake. thats probably why :D
nevermind, made no difference
Yeah no I meant on your AICon
It looks ok, assuming you’re not detecting food with a diff sense than Sight
Check the Visual Logger to see if there’s any info
I would first check the gameplay debugger perception category to visualize the perception to see if the AI sees the player.
ooh, neat: https://www.youtube.com/watch?v=EjPp5A43HQI
Cropout is a top-down Casual RTS game sample project for Unreal Engine 5 that demonstrates best practices for building a title designed for cross-platform release. Find out more and download at unrealengine.com/cropout.
In this video, Cropout's creator Arran Langmead, Senior Content Developer at Epic Games, walks you through every aspect of how...
Kind of hoped this was a demo for the MASS stuff.. but didn't see anything about that yet
#mass is still well under construction 🚧 afaik
Yeah, I was expecting for it to be more #mass like as well. I like that they didn't though. Shows people that you have to build a game like Lyra as well (like so many people seem to think).
Gonna have to check it out, it’s right up my alley
doesn't look like it :<
That's the visual logger and not the gameplay debugger. The gameplay debugger is the overlay shown during runtime by hitting apostrophe. Then the numpad for the perception category.
Visualizing the perception will help you determine if the problem is in the perception or getting the data from the perception.
@dense owl Thank you very much ..... this is whole new world for me .... i wish i knew it earlier ..... thats mean i have bad ported mash ?
Yeah I think it means your pawn is not on the mesh
Np
You need to make the perception category active by using the num pad
One of the early examples the Epic guys had for mass if you remember the livestream was a crop raising thing with similar behaviours for gathering. I thought this might be sort of a documented version of that.
Navmesh leaves spaces around the edges. (The AI just stops when it gets there. Like a bug)
How can I get NavMesh to touch all over the map?
Does EQS generator handle duplicate items under the hood? i.e. I'm taking multiple locations from multiple source and some of them duplicate and I just feed them all to QueryInstance.AddItemData. Does it mean I will have duplicate EQS items as well? I'm just curious because judging by the code QueryInstance.AddItemData doesn't do any duplicates check, but maybe there is some internal postprocessing to remove duplicates 🤔
scale the volume?
Volume covers the whole map.
This happens when there is an object on the nav.
And I don't want it.
I am trying to make my AI rotate smoothly when patrolling. this works fine when I turn of the yaw rotation and orient rotation to movement. However when the player is detected I want the enemy to look at the player constantly, this doesn't seam to work when i disable rotation yaw. Anyone got an idea for a fix?
Not a bug. The nav mesh gives clearance for geometry so the Npc's mesh doesn't clip through it. It's based on the radius of the agent properties.
I didn't mean bug in editorial sense. So the person playing the game will say there is a bug in the game.
I changed the Agent Radius, didn't work
You can't change the radius to be less than the default supported agent directly on the nav mesh settings. You have to set up the supported agents. If you make it smaller than your NPCs, they will not navigate.
The reason why it looks broken is you are trying to make them move off the nav mesh and using partial paths.
Use control rotation on the movement component and adjust the rotation rate.
Thank you so much!
Worked like a charm :D
All I want is an AI that roams freely inside the house. But when it comes to those parts, of course AI stops. What is your suggestion? Also I couldn't find where to turn off Partial Path.
super weird. tried it again this morning, and out of the blue it works, but only when the player pawn is high enough to catch their eyeline. so it may be a problem with where the AI perception cone starts on the pawn. but not 100% sure.
how does the AIPerception component choose the origin of its perception? does it just take the centroid of the pawn it's currently controlling? or can we tweak it somehow?
It uses a function called get view point on the pawn. You can adjust the eye height variable to move it.
gotcha, thanks. and do you know which trace channel it uses for sight? visibility?
Visibility if I recall. But you can change that in the project settings.
I forget where.
I already told you the suggestion. Make a supported agent that fits your NPC in the project settings. If your capsule radius is 40, you need a supported agent radius of 41.
Make sure you are only telling them to go to a location on the nav mesh. I prefer using the EQS for this.
Turn off partial paths in your move to functionality. It's an option there.
ah yeah thanks.
hey guys, any ideas why this is happening?
this is my BT
pretty simple, right?
I added the wait node to see if that's what's causing the switching
(it goes MUCH faster on screen)
Doesn’t look like your EQS query template is being saved into the bb key
anyone got a solution for a workaround here?
since the smart object spot isn't on the navmesh it's unreachable by AI
Why not put it right on the edge
If that’s possible, idk smart objects
can't, they are related to the animations
Ah alright
but i think i found an okayish solution
where the interactable objects modify the navarea around them and make it more expensive to enter/traverse
so normal roaming AI shouldn't run into chairs, while those who interact with it will pay the "price" to enter the nav area
which kinda ends up like this, still have to tweak around a bit and promote the navarea to the table
but overall it seems to work (incase of the screenshot i could probably just leave it as it is...)
and use a nav modifier volume whereever it doesnt work out 🤷
Yeah that’s smart
I wonder why my AI is not responding to any of the functions when there is no compiler error and the BP_AIController is set up to BP_Enemy. It doesn't return nullptr on if statement
Don't do things in begin play for a controller. Things should happen on possess
For some reason the NavMeshBoundsVolume is recognizing my enemy AI as an obstacle that the volume is not being generated only underneath the enemy. I wonder how I can fix this issue.
You must have set it up that way. Check all of your collision.
Also the nav mesh bounds volume isn't doing the generation. It's just a volume that marks where navigation can be generated.
don't know if it belongs here, but I got a question about EQS. can EQS "see" what's in a wall? I know it can know a wall/obstacle is there, but can it also know if something is sticking to that wall/obstacle? even when I set it to cone, the "probe" thingies only stick to horizontal flat surfaces. and I did find that you can make a mesh by using those probe things as the vertex location, but I think it's quite a complex and expensive task
is the agents thingy for rl comming with ue5.3 or do we need to complile everthing from the source ? does anybody know ?
Is AI in general easier with blueprints or C++? I like C++ because I'm can usually organize it better but is there any significant benefit to using the blueprints for it?
Depends on your preference I suppose. I prefer C++ as well for similar reasons. But besides the obvious performance implications, it is a lot easier to iterate small changes in blueprint and work with latent tasks. A lot of times I would start with blueprints and then translate to C++.
Also by default C++ tasks act kind of like a singleton so you'd have to work with the NodeMemory parameter if you wanna save state, which is a bit trickier. But you could also chose to instantiate the node in constructor using bCreateNodeInstance = true (which blueprint tasks do by default), but obviously the performance would be worse.
Agents thingy for RL?
everything seems like it should work tho
I haven’t seen anything about it in the preview so prly not 5.3
Try printing the value that’s coming out of that prey eqs at runtime
Maybe @ocean wren would be interested in something like this
Hi guys, i want to create an enemy like the basic skull in Devil daggers. They are like a homing projectile, with bouncing and have awareness about their surroundings (they will dodge other enemies). Any idea how can i do such thing in Blueprint? I already tried giving them Projectile movement component with homing (which works qquite good), but no matter what i do i cant make them bounce, stay on target and evade each other at the same time. I know its a difficult question but would appriciate some suggestions<3
Guys, this is a ladder and I'm at the top of the ladder. And the standing below is AI. All it has to do is follow the navigation way towards me, but it does not.
I also added a wall in between, so (as seen in the 2nd photo) a sphere (sight) was created. I want its to follow this. But it doesn't follow it either, just standing there.
Btw when I go down, it can follow me.
Any help?
Steering behaviors is what you are looking for.
Hi Luthage. Do you have any idea for my problem
Yeah, I'm doing my own version of that, but always good to see more examples
So I got my ai to hear my player shoot and move to it's location by using this function and behavior tree setup. However, when it reaches the point he heard the players shot. he just stops. And doesn't go back to patrolling, how do i make him go back to patrolling after a while?
Nevermind, got it!
I have this setup in my enemy AI branch
I want the player first to be spotted, before moving over to the attacking face
Why is spotted higher priority than attacking?
And why is attacking moving?
Moving to get a shot should be its own subtree imho
and then once you have line of sight on the target, transition to higher priority shooting subtree
But then what does spotted mean? you could maybe have a "has ANYONE on the squad spotted anything" subtree for example
the main thing to think about design wise, is priority and how to gate it
Hi everyone, does anyone knows how to make an EQS, or Task so that the AIs encircle an actor ? I'm completely lost.. Any help would be greatly appreciated, thanks
Someone here did it using dot product iirc
@dense owl Oh ok is it old messages or ? And what do you mean by iirc?
@harsh storm Helloo, would you mind sharing how you created this custom EQS Gen ? I'm really interested in 🙂
I haven't created a generator yet. Just a context.
For that, all you do is inherit from EnvQueryContext class and then override the ProvideContext method. Do your logic in there and then depending on what you want to do, call the appropriate static function on the appropriate class. Look at how EnvQueryContext_BlueprintBase does it.
(C++ btw)
I used EnvQueryContext_Querier to see how the ProvideContext method is written (it's small enough) and then the BPBase one to see how to handle the static method part.
I see, its way beyond me haha, but thanks, I'll dig around
My goal is to achieve like in Age Of Empires when AI focuses a building they circle around it and start burning it, but I have no clue on how to do it at this moment, I guess I could use EQS but even that I'm not sure
EQS has a query where you can create a circle.. you can then filter any items that has something inside it.. so basically choose a point that doesn't have someone stood in it.. so just keep generating a point on the circle thats empty etc.. I guess it depends if the agents are all already there..
@ocean wren Thanks! I'll give it a try
Don't forget that EQS queries can have a bunch of generate and filter items.. so add a bunch of different filters.. "not near a teammate", "on circle","in front of the enemy" etc.. there was a great presentation by Eric Johnson at Square Enix, but its in Japanese sadly
I saw the english language version in Paris at a conf
He had a dot product that circled the enemy.. so basically after each generation it'd add to a value that made the dot product rotate around the enemy
If I recall, he also added to scores for "closest to me" points etc. so that enemies would quickly wrap around
Oh cool, I'll check that, not sure about filters yet I need to look at some doc/vids
@ocean wren To do the filter "not near a teammate", do you mean I need to create a custom filter?
Well, you can do a distance filter between two positions..
Read the EQS docs, it needs a bit of massaging to work, but does work pretty well
I did add a bunch of my own contexts, filters and stuff, just so I understood how it worked
wasn't a fan of the data stuff though 🙂 personally would have done it differently
here's what they're using in the Cropout sample project:
idk if that helps
Yeap I have my circle generated around my actor, but now I'm trying to do a custom UEnvQueryTest to test if that point in the circle is free( so no AI standing here yet)
But I'm not sure on how it works actually, And I'm pretty much doing shit I assume xD
So far I have this, I used a Distance Test to get the highest score, but as you see I have an actor on the highest point, and I'd like to make it so that its score becomes 0 or like nope you can't go here, and based on that the AI will choose another point to go on
You need to add another filter that uses a different query context which provides all of your enemies to the query and then use a filter on that context
it probably isn't obvious, but you can stack filters and the like
You don't need to make a custom test. Just use a distance test and a context to get the locations of all the other AI.
it isn't printing hmm
Is that begin play firing?
yes if I connect a print node to begin play
it's firing
wait it's not
the hell?
@ocean wren @uneven cloud I created another context which provides a location set of all enemies actor, Now I tried stacking a Distance test, but it does not work yet, I'm not able to make it changes the scores.. If someone has a bit of time, I would like to share my screen, would be easier
What do you mean stacking distance test? For the distance test to allies, you want to filter out items that are too close.
@uneven cloud I mean I added a first DIstance test that scores the nearest point, and added another one that using another context with all locations of enemies
only begin play doesn't work
i can add an event tick
which works
I have a class called PreyBase
standard actor? and is it placed in the level?
which serves as the base for all the prey animals in my project
this one isn't; its children are
okay I'll do that
This should be done when the controller is possessed, not Begin Play
I should set the EQS in the controller?
You should not be doing anything with the blackboard until the AI controller has possessed the pawn. Both the controller and the pawn have functions for when this happens.
ahh okay, so the event on possess ai node?
Should work
I'll transfer all the code to the AIC then but I'll need to cast to each child and get their assigned EQS?
nvm ig i got this working
can anyone tell me why one of these functions has a "TargetLocationKey" while the other one doesn't?
both the blackboards have that vector key
and both the tasks set said vector key
You need to expose the key
The little eye icon
If you don’t have one in it, create a BB key in it and expose it
Hello, I'm starting up with BTs and Ai movement, and I followed some tutorials to understand the topic, specifically the one from the Unreal Documentation https://docs.unrealengine.com/5.2/en-US/behavior-tree-in-unreal-engine---quick-start-guide/, but I'm stuck and can't progress. I built the BT, and the AI does the patrol sequence correctly, but it never seems to perceive my character. I did set up the AI perception in the AIController and AIPerceptionStimuliSource in the Player and I followed all the steps but maybe there is something else that I'm not seeing. Thanks in advance
@warm dew If you do a print string where you sensed an actor, do you see it?
yes, but it only sees it once
Yes, the event will be triggered once. So is your problem related to your BT not going to other sequence/task?
no, it sees the player, but doesnt move towards it and keeps onto the next sequence (random patrol)
@warm dew Did you add a blackboard condition so that it doesn't trigger to other sequence until that first condition is met?
yup, and in the flow control the ObserverAborts is set to "both"
Can you show your BTT_ChasePlayer
sure
Ok, does your Patrol sequence actually moves the AI somewhere?
yes, it works fine
Is it showing it grabbed the target bb key in ai debugger?
That is, is EnemyRunner getting a value at runtime
no, its not
Do you set the EnemyRunner var ?
omg, I misspelled the name of the var. Thank you SOOO much
it works fine now ❤️
Good news 🙂
In the meantime, I'm still struggling with this EQS Context on circle.. I'm completely lost I need some help, best way imo is that I share my screen, so if someone is there and have a bit time I would really appreciate, thanks in advance
I'd like to create this kind of behaviour, I thought using EQS will help me, but I'm not even sure this is doable using EQS. So when enemy is coming to the target he will stays and attack, and the others enemies that might come will try to place around the building.. Really I could pay someone to understand how to do it.. Hopefully someone can help
See the gif
Do you exactly need what age of empires is doing or just something enough to circle around something?
If I have something close I would be more than happy as a start
age of empires relies on complex algorithms dynamically form enemies in any shape in the game, no matter the unit count
You wouldnt find someone for that easily, and probably pay a lot
for the latter one, dont pay anyone for such simple thing
its easily can be achieved with EQS
Thanks for the advice, I'm just desperated to do it, I tried so many thing without really success
What do you know about EQS so far?
I get the principle, filter, scoring etc but where I'm wrong in my code (I assume) is with context, but I'm not sure if I need to have another context for the AIs already standing in there
context is the building here
and in EQS, while you are creating the shape you'd use your context's location
and generate given shape around it
its a matter of setting a few variables in the editor
this will provide you an array of FVectors
then you'd pass those FVectors to your units
and move there
I do have a circle shape generated around my actor, and have a simple Distance test to make the AI go to the highest score, works fine with only 1 AI, but not for the others
you shouldnt run this per AI
run this once and distrubite the FVectors to AIs in a top down system
this way you can also select which actor needs to go to which point in the shape
The thing, is I have a c++ understanding and know how to write it, but Idk the UE API so far at all.. So I'm sticking with BP. And the top down system you mentionned I completely agree, but again with AI I don't have any idea to "share" an EQS
you dont share EQS
you share the result
EQS provides you a result, either FVector or array of FVectors
you take that in the manager class, which also suppose to hold a list of your current AIs want to take the given action
then distribute the FVector as move goals, could be a key in blackboard
and then after they receive the FVectors, you somehow make them move to the goal with BT
Which manager class you talking about exactly ?
your own one that you'll create
could be your own controller class too, if its an RTS. It depends on your needs
but any class that manages the AI units
Hum, I won't lie, I kind of understand what you mean, but not sure, if you have a bit of time maybe I could share my screen and you could help/explains me how to do it?
I only provide support via text in this channel, sorry
But feel free to ask questions or dig deeper into concepts
Ok no problem thanks
So for the manager class, when you say "you share the result" do you mean I need to run the EQS inside this class and not in a BT?
Exactly
when you run it in BT, it only runs for the AI that runs the EQS
so others have no idea what other FVectors it returned, so they cant take unique points in the shape
instead you run it on an external class, then give the results to AIs
there are nodes to run EQS tests in BP
they return EQSResult objects, since its a latent process
you bind a function to that delegate
then receive the results via it
after that happened, you loop your current AI units
and set "target move goal" vectors from the points of the shape
then move them to there
Ok so I assume when I assign their target I just foreach the EQSResult objects, and give each AI an FVector ?
not EQSResult objects, it will be a single object only exist to bind to a delegate inside of it. That delegate with return FVectors
then you will foreach the FVectors
Yeah thats what I meant just mispelled here, I see, then I set each AI an FVector in their BB, and move to that location.
But what about so that they dont collide each others (or minimize it) ?
you will match your AI units to FVectors in the array
access a different AI unit for each loop and they will move to different points
if you have 8 units but only 6 points, then you'll have to do something else
after units are finished, but you still have two more loops, you can exit the loop and make others move to random places in a radius around their friendly units
its up to your creativity at that point
Yep sure, Ok I'll try to implement all of this, don't you mind adding you as a friend on discord so that you know I can ask you I really need to?
I'd rather not but I'm available in here time to time, but even better there are more smart people than me here more available than me 😄
Ok, thanks anyway, really appreciated, I'll go code those things
good luck 
Thanks 🙂
Just one last question, which class (base) would you recommend to be the manager, I assume EQS are ran in a thread, I'd like to keep the async
EQS runs in game thread, its timesliced
I recommend a plain actor
where you instantiate in gamestate
Alright! Thanks again!
is anyone using a navmesh in a level with world partition in 5.2.1 ?
seems to be broken
I just updated my game from 5.1.1 to 5.2.1 and on a world partition level, it seems the navmesh is only applied to objects for some reason?
for example here on this screenshot its only applied to that ramp for some reason
I tried moving it up and down, nothing works
its working fine on this same level in 5.1.1 though
@celest python Do you know why it goes to the Branch False pin ? This is the Manager class
Prly cause you’re running it on begin play
Ah ok, Where should I run it ?
I would think this still applies here: #gameplay-ai message
Not 100% sure but with EQS, it might take a second to get a result, might be better used in an actual BT imo
I don't know man I mean I'm just reading everyone who can help, and Eren suggested to create a manager class that runs the EQS once, and then share its results with the AIs, this way it is easier to distribute along the circle points
I found the issue (partially), I needed to bind the result to the event OnQueryFinished, but for some reason the resulting locations contains only 1 location, but the circle generator on the EQS creates 10 items
Yeah but is it set to return only one result?
Show code
I just removed all EQS test, now I just have a circle with some points i can see with the EQSTestPawn
But still only 1 result
show how you run eqs test
and the delegate
@gentle rampart
oops you already did above, sorry
you have to bind a delegate from this
I found the issue! I needed to set AllMatching
not directly fetch results
Instead of SingleBestItem
does it work though?
eqs should provide results with latency
I have a reaaally strange issue, I'm used to BT, but now idk the hell is going on
You agree with me that once the SetDidReachLocation is finished it should go on the next sequence right ?
If SetDidReachLocation is succeeded, it will finish this tree and start from the root again.
Yeah and then this time it will go the Sequence on the right side no?
It depends on your decorator. Basically checks from the left decorator again.
This is the left decorator, nothing special
The logic of selector is, if any branch of it is succeeded, it will omit the left branches on the right.
Not the decorator itself, but the condition. If your TargetLocation is set, it will always do the left branch of your select until it fails.
Oh yeah the TargetLocation is set one time and doesnt change, but I wanted that once the DidReach succeeded it goes to the other sequence
So why don't you put other sequence with two task nodes on the right side of the sequence with your DidReach?
I don't understand, I mean, I have the sequence on the right on the didreach and actually the DidReach is a "try" if I could get rid of it I'd rather prefer it
You should do like this moving all the sequence there.
Does it work?
Yep bro, thanks!! I guess more than 12h doing UE my brain is fucked up, thank you so much
Cheers, take a rest, bro.
I need some help with Behavior Trees, please. I'm fairly sure this is a terrible tree, but it's the first one I've ever made and I still don't fully understand how it all works so it's the best I could get. In short, my problem is that the tree comes to a stop one way or another and just refuses to execute certain branches. I know it sounds stupid but I just can't find out what's wrong.
Now, as a quick explanation, it's the AI for an enemy class and it's supposed to patrol until it receives a set target (assigned in the first service), in which case it will then chase and, if in range, attack and fall back a bit, then restart this while checking the distance to that target to see if it has to go back to chasing. Also, if it loses sight of the target while chasing, it will go to the last known position and wander around. If the target is lost for 30 seconds, it goes back to patrolling. The disconnected parallel is intentionally there. Also, detection is handled by a "PawnSensing" component, by hearing and sight.
I've been at this for several hours now and I'm at that point where you get more or less close to solving the problem but never get there, and I'm in a bit of a hurry so I need to ask for help. I'll share the project if needed, since it's a small cut of the big one. Thanks a lot in advance!
Might be exactly what I had yesterday, try to link your whole Chasing Sequence on the Patrol one just after the wait
Oh wait Chasing is a selector
(@gentle rampart First of all, amazing show)
I think I understand what selectors and sequences do, but I've been kind of guessing around and trying stuff so don't trust my tree...
Try moving the Chasing Selector on the right of the Wait node of the Patrol
Chasing is a selector because I don't want the actor to go searching around but stay attacking as long as it succeeds. I think that makes sense (?)
And sure, give me a sec ^^
Still getting stuck. I don't remember what I changed but now it gets stuck as soon as it detects a target instead of after attacking
It just detects you and the entire tree stops, only shows in yellow the ROOT part
I believe it would go back to patrolling if I wait for 30 seconds so the "attacking" bool is set to false back again
Seletor will stop executing their children once one succeeds
And sequence is supposed to loop?
Most likely till the condition is on
Actually YES it will loop the sequence node from left to right once this sequence is enabled (BB)
I replaced the "Chasing" selector for a sequence but I only managed to get it back to running the "Chase" task once, still stops never to come back again
So, even if we don't really know how, I did solve it (at least for now) with the great help of @gentle rampart. I changed the BB Decorator from the "Attacking" Sequence to the "Chase" task and it seems to work and I haven't found any dead ends like the ones I mentioned earlier yet. I leave here a screenshot of the new tree, in case it's useful to anybody. Any comments on this all are much appreciated. Thanks once again! ^^
<@&213101288538374145>
I wonder if bots specifically always target #gameplay-ai because it starts with 'a'

nah this one posted it on every channel
almost
Yeah, it was across more channels.
I usually lay out my priority by specificity, so I fall back to general behaviour from specific. I would usually have attack at higher priority than patrol, because it falls back to patrolling as lower priority if it hasn't got anyone it wants to attack. So I'd have a low priority idle behaviour to the rightmost.. then patrolling with some time-based activation, then attack and having various stages of attack behaviour (can see an enemy right now, have seen one recently and want to move towards them, trying to flank their position etc).
Hi, i'm using statetress, is that normal my task stop when i return EStateTreeRunStatus::Running in my task tick ?
I don't think root decorators are supported. They don't even make much sense imo.
Or maybe I'm thinkin' of subtrees 🤔
¯_(ツ)_/¯
Why would you?
What's the thought process behind this approach?
Proceeding to what though.
If that decorator is on the root node, the tree won't run at all if it is false.
It's not on the root node
You set me up!
It isn't redundant.
No, it's not. BT's aren't just one thing and one thing only.
Why have a behavior tree at all at this point?
You can do the same thing without a BT
It can accept behavior. As you are demonstrating by giving it a sequence node
It doesn't
You can have a selector node as well
Your tree is already weird. There isn't a point in even having a BT if the entire tree doesn't need to be searched if you don't have a target.
Just...stop executing the tree when you have a target.
Wh...why would your player have a behavior tree?
But that isn't the player
The player would be the controller. Not the AI
The player may be giving orders to the AI, but it is still AI.
It's not the player.
It's not. But w/e
Alright. Have fun I guess.
Is a statetree task tick, supposed to tick periodically ?
If I recall correctly, it ticks whenever it is the active task
So i guess something exits my task, if i always return running from EnterState and Tick, it should not exist ?
I am having trouble comprehending that question. My apologies.
Mhh what is the "active task" ?
The task that is currently being processed.
If i return EStateTreeRunStatus::Running in EnterState and Tick, can something stop my task ?
Probably
Mhh i don't have any evaluators and i'm testing with a single task, what could stop it ?
W/e you tell it to I suppose.
Ok thanks
I'm making a endless runner game, with AI. How do I use Nav mesh when I don't know where the AI will spawn?
Can't seem to add it to BP.
It shouldn’t matter where the AI spawns
Long as it’s on the navmesh
yeah but I have rooms with props which spawn in. I don't think I can just stretch one massive nav mesh.
otherwise they will just walk through walls and stuff...... I think
The AI system is smarter than that
Or to be more specific you can set the meshes’ (i.e. walls) to “can ever affect navigation”
You can also use nav modifiers if needed
That in combination with collisions will prevent your AI from walking through walls
hmm. Ok will look into that.
Just noticed you mentioned endless runner tho
should I use "update in runtime" function in the project settings?
I have some moving objects which block some paths
Yeah, if you’re procedurally generating stuff, you’ll need to tick that on.
either way, many thanks for the help mate. Have a great day 👍🏻
guys what is the easiest way to get variables from one task to another?
Saving them in blackboard keys
u mean like in blueprint?
Ok a tick is not a real tick in mass tasks, it's called by mass signals
I mean like from the task into a bb key
So the next task can use it
like set and get
What variable are you trying to set
i think i know what you mean
#mass would know better
thanks
Know what ?
Is there a reason why UE's navmesh is garbage?
Because you don't know how to use it.
Has anyone been using Learning Agents to any success yet, or would it be better to wait on 5.3 official release?
Quick question, whenever I use Move To task on a group of actors they just clump together. What's a good way to solve clumping?
@rare stag You can try using the DetourCrowdAIController as parent class of your current AIController class, this is not optimal but it does the job kindof
thanks, I'll check it out. I'm implementing this in an RTS, so there will be lots of actors, I should have mentioned performance is a key metric 🙂
For performance Idk to be honest, I'm looking for that as well and the DetourCrowd works out of the box, but is not really "working" in all cases. I'm also looking to find a good way of detour of AI
also be aware that default cap for detour agents is 50, any over that will just not move
ouch, thanks for that
its configurable
but if you go over 120 or so, numerous opeimizations will be required
best of both worlds is ORCA
better than RVO, cheaper than detour
probably can be parallelized too
detour has massive problems as is with 100+ bunched up agents
it reevaluates corridors on Tick, and can end up in a jitter where agent decides to go 90 degrees left one Tick, 90 degrees right the next
@celest python What ORCA is ?
steering algorithm
Ok, but what is the acronym behind ORCA?
Yeah but can't find xd thats why I'm asking, is is something we need to implement or part of UE directly ?
It's not a part of the engine, but widely used for robotics and other engines
it stands for Optimal Reciprocal Collision Avoidance
Aah thanks bro
Quick question, does Detour works with RVO enabled?
@celest python Have you been able to implement the ORCA algorithm in UE ?
While things like detour will help, a better solution is to make sure they aren't trying to go to the same place. For things like an RTS you might also want to look into formations.
Hm anyone know how to debug "get current path" from AI controller? When I use it i only get a straight line from start to goal ignoring all obstacles, but the characters do move correctly with pathfinding
When using them together characters get stuck, the 2 systems fight eachother it seems. I tried to check detour crowd source and seems like it has its own RVO calculation
As stated in the docs Detour uses Adaptive RVO sampling: https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/NavigationSystem/Avoidance/
hello guys i have a question. my ai is coming to the player fine but its rotation is jittery. it moves to where i am seconds before then where i am now. any youtube videos or advice to smooth the movement.
Guys, does unreal uses RVO2 or still RVO1 algo?
Hm seems like Current Path for crowd AI is always empty vs for normal AI controller
Are you moving it to player location which you update periodically?
If so, use MoveToActor with goal tracking
@patent hornet Alright this helped alot but hes always snapped on to me in rotation. is there a way to slow down the rotation
i have a leaning blueprint on him and he dosent lean very much when hes just watching me.
CMC has max turn rate?
Btw
I find spawning MoveToActor and just moving to it once with GoalTracking a superior way to handle movement
You then just teleport/attach movetoactor around
i would have to find a video on that. im still pretty new to ai.
And dont need to use parallels if you want to move and do something else at the same time
Turn off use control rotation on the character. Turn on use control rotation on the movement component. Adjust the rotation rate.
To smooth out movement turn on use acceleration for paths in the movement component and adjust acceleration and deceleration.
Using move to actor will give you really shitty behavior.
Hello, does anyone knows why the navmesh isn't affected (correctly) when I changed the rotation of an actor at runtime?
I tried settings the project settings navigation to Dynamic and Modifiers Only, but it does not work
When I try with Dynamic it is really strange like navmesh blinks between red and green, an AI is completly broken its like nav adapts in a bad manner even in places where nothing changes, I can show a video if needed
Ok, i found my problem, for anyone who might need it, I found the option "Can Ever Effect Navigation" on my SM and it fixed the problem.
What do the FilterFlags in the NavigationQueryFilter interact with? Or, how do you get flags onto the navmesh? Are they even used for anything? As far as I can see, the flags get copied into the FRecastQueryFilter and then just get totally ignored
If I remember rightly, those are for the NavAreas to be able to set a flag for the navpolies they cover? I could be wrong though, its been a while since I looked at the code. But if memory servces, you could use those to make it so that specific agents could navigate across an opening for instance.
how does this BehaviorTree Decorator work? I've verified that this tag is on the SelfActor as an ActorTag as well as on the AbilitySystemComponent tags.. but the decorator is not picking it up.
the answer is.... You need to implement the IGameplayTagAssetInterface on your actor... which I did.. and just routed it to do the same thing on the ability system component of the character when that gets called.. so now it's all wired together
yay
Yeah, takes a tiny bit of cpp to implement but beyond that it’s pretty straightforward
After making multiple changed to code, StateTree started to behave unexpectedly
Before it worked fine but now I have a list of Is it Null States??? the one with ID 65535!!!
I recreated the StateTree DataAsset but I still have the same issue
any idea what is the possible reason of having 65535 as active states(there's 6 states like that), I do not have a state with that ID(as you can see this is the root's parent ID )
Have you tried reverting your changes?
Yes I found out that wasn't the issue, active states allocate 8 indices and these are garbage and it uses NumState to keep track of the last index, that is how Last function works, Anyway, when i had a look at the logs for some reason the tree being interrupt the navmesh, I am trying to find out why
Guys what the best way to give multiple AIs a target location to go to, but minimizing overlap with each others ?
I tried with EQS and generating some points and assigning the the AI a random location within the matches of the EQS, but even with that I'm not fully satisfied
why is my ai struggling with this tiny step, the player can walk up it completely fine, its nothing to do with step height, but the nav mesh seems to think its flat here. what should I do about that?
RVO or DetourAI
You can also use the get point in navigable radius tho I’m not sure if that’ll change from one instance to the other
The nav mesh has nothing to do with it. It "being flat" just means it can navigate up the step. Getting stuck on the step is a movement component problem.
so then why can the player walk up it completely fine
both have the same capsule size and step height
You have to debug it
What do you want it to behave like?
yeah but detour is limited, i need like 200 AI at the same time
@uneven cloud I want that they have like 'natural' pathfinding, now they just try to avoid each other but its not very nice
If you see like 'Diablo' for instance, there pathfind looks way more natural, and dont collide as much between each others
Then I wouldn't do 1 EQS and give them out randomly. I'd do each one has their own EQS with tests to make them navigate naturally and a test to filter out distance to allies.
@uneven cloud How could you filter out distance to allies, Context ?
like what
Distance test + a context to get the allies destination.
Is there a way to get a class that AI Controller has possessed without casting?
This is the only way I can think of so far
AIController.h
class AEnemy* Enemy
AIController.cpp
AEnemy=Cast<AEnemy>(GetPawn());
Looking for some advice
I'm looking to start on AI for my project, and want to pick a solution/framework for the AI
Previously I've created a GOAP system in unity, and a utility AI system as well.
For this project I mostly want to create a simplistic AI for monster mobs
I've used the search feature and see that there's a general concensus that systems like Utility AI and GOAP are older, and not necesarily the best tools for the job, and that there are other solutions.
I understand the answer for which AI system is "it depends", but I'd like to know what other options there are for AI systems that aren't too complex/complicated. That way I can research, and create standalone prototypes on a few of the options before comitting on this project
tl;dr: what are the modern ai solutions i should consider when deciding which system to go with?
Modern? none of them 🙂 seriously, all of the options commonly in use have been there for 20 or more years at this point
For monsters with relatively simplistic AI, I think either HFSM or BT's would be the most obvious, with BT's being the choice if you want it pre-built into Unreal
I mean, almost all of the systems are a pain in the arse to use, almost all have problems and almost all have good points.. so pick your poison, they all have a different flavour but I'd not call any of them "modern" or even "good" for the most part 🙂
If you really want more modern stuff... and I'm talking about a higher level of complexity to execute.. I'd recommend looking at reinforcement learning (the kind of stuff DeepMind are doing), because it offers a way forward for things like imitation learning (seeing a human play, or use a system and perform roughly the same) but also allows longer term planning and decomposition.
Obviously this isn't the current standard, but its coming.
Can someone explain EStateTreeRunStatus
when I return EStateTreeRunStatus::Succeed in a task will it means that the Tree Succeed or the Task Succeed??
like if i have the following Tasks Idle - Walk
and when the Idle Task finishs, I returned EStateTreeRunStatus::Succeed, will that means that the tree will stop and execute from the beginning? I thought it means that the task Succeed and it will execute the next transition, but after I saw the following code I am a bit confused, I have a Idle Task return Succeed and Walk return Running but the Tree Status is Succeed, instead of running in the Walk Task, because it stores the last Succeed status from Idle Task
@uneven cloud So I'm trying what you suggested me, but I don't understand how I could make the AI have a target location to go, while still being able to run some EQS queries that will try adapting its pathfinding so that the AI tries to not overlap with other AIs.
My problem is more like a parallel issue, or idk 🤷♂️
Task succeeded
tree's succession is relative to its task results
Yesterday I wanted to research how can I make AI to learn body language then ended up with fatigue before even starting
Maybe starting with face mimics would be easier 
Casting is fine in C++.
I don't understand your problem.
It's also fine in BP to be completely fair (depending on the context)
True, but the person was writing C++.
Good morning!
I am designing a rush down enemy in my horde shooter game and having decent results but want to make improvements. Currently all the AI just runs in a shortest distance straight line path at the player. I was wondering if there was any resources, tips, helpful nodes, or videos on adjusting this so that the attack angles of the AI felt more like flanking? Rather than just running in a straight line. i.e. I am trying to direct my AI along the green lines instead of the black.
Create points of sphere around the target, move to layer(s) of sphere first
then move to target
also manipulate the direction with FCubicInterp or bezier spline in AIController so it will look more natural
I think I found out why It Doesnt work! I don't fully understand why
The Tree Repeat execution 5 times but I have non-repeatable task and thus it fails even though it succeed, here's a simplified version
First Iteration
State Result Hierarchy
Idle Succeed Sibling
FindTarget Succeed Sibling
*ClaimTarget Succeed Sibling- Child
** MoveTo Target Running Sibling - Child - Child
Second Iteration
ClaimTarget Failed because it is already claimed
this code Choose to store a handle to FindTarget, Even though ClaimTarget Succeeded too,
Next Iteration it decide to start from ClaimTarget which fails because it cannot be claimed twice
I don't understand why this happen. does anyone have explaination for that
The EQS allows you to find good destinations around the target.
If I choose a point around the target I guess it would just straight line to that point right? Still varies movement I guess but almost makes it feel worse if an enemy just runs past you no?
You can add a test to not run past the target. It's just a simple dot product.
@uneven cloud What is a good way to randomize the item chosen in EQS? When I was workin' out doin' the navigation with it, I always seem to score the highest in the corners (I use a box) and it always seems to pick the front left corner.
There are run modes to randomize. Also look at your tests and see if they are actually giving you reasonable results. I also only use the donut generator, because it gives more natural behavior.
The results seem reasonable enough. Though it always selects the corners.
I'll try out the donut generator tonight.
Guys what's random deviation in the wait task?
I guess it depends what for. Body language is a whole field of research (non-verbal communication) that's been around quite a while. People like Michael Argyle (now dead I believe) and the like have been studying it for ages. You can use a thing called cosine similarity to compare skeletal orientations if you want a relatively simple metric. But look at pose estimation (as a search term) for a good starting point. I use something like Google's MediaPipe framework to extract body pose, then use other models to distinguish pose similarity.
We once had a game where if you shot enemies, they'd try and flank you. Players hated it because you'd shoot the enemies and it looked like they ran away (they kinda did, but it was to go get a bigger group and flank). I'd say try and write an EQS that biases the points towards the periphery of the players vision arc (using dot product) and as Eren says, use some layers of different donuts around your player (donut is a thing in EQS).
Gotcha. So incrementally set destination points moving the AI closer and closer
Yeah, but bias your choices to be on the edges of the angle of the players nominal vision arc, i.e. move to the sides of their view cone
essentially its just a scoring function in the EQS
You usually want to make sure you only select visible points too.. because having AI move out of the players vision is hard to read generally
Depending on the game, its ok for the enemies to take cover in the players view cone.. as long as its going to pop up or out every now and then to remind the player where they are
I'm keen on steering towards facial expressions instead. Easy to find data and looks easier than whole body language training
Does it get expensive continuously referencing the view cone? Especially if the player is spazzing and looking around everywhere?
Im wondering if this is overkill as a starter project after getting familiar with everything?
Yeah, faces are pretty easy to get data for.. bodies are possible but there's lesss out there. Sports and other bioscience stuff has a bit.. but its not about emotional expression etc
It could, but just use a smoothed version of it.. don't use the actual view direction but an accumulated version
Gotcha. Thank you!
proportional derivative controller basically 🙂
What's your use case?
Definitely check mediapipe by the way.. pretty fast, pretty reliable.. does faces, hands, bodies etc.
I just want AI to prompt current emotion from the face expression like anger, happiness, shock etc.
It sounds too comprehensive but I want to keep it dead simple as possible
Just be aware, almost all of those facial emotion expression things.. are total crap 🙂
But yeah, its a simple enough project for your first one..
Use OpenCV for it.. easy as pie really
Why is that? In the end expressions are universal
Should be easy to pinpoint whats going on
Because everyone misreads eckmans work on facial expressions, or rather doesn't REALLY read it. The "universal emotion" stuff is misinterpreted a lot. There's a thing called masking (which also comes from eckman) which means that emotions aren't always expressed when they're felt etc. Plus there's a fair bit of noise in people's faces when they're interacting (imagine someone arguing while playing the game)
So problem comes from misunderstanding the science part at the first place rather than AI implementation itself 
Eckman was ultimately working on micro-expressions, the little things that determine real emotion from the masked or even acted versions
Well, people willfully misinterpret what eckman said.. its easier to regurgitate some chinese whisper version of his work than actually read it 🙂
And its one of those scientific things that just replicates its own error..
I feel sorry for Eckman in a lot of ways.. probably frustrating to see your work misquoted so many times 🙂
Have a look at mediapipe facial landmark detector.. or OpenCV's version
I think OpenCV might even be incorporated into Unreal Engine already now I think about it
Might be a plugin
Oh a PID loop. Gotcha haha
Roger, thanks a lot zoombapup 
Gonna check eckman too
Have a look at the FACS system.. that's what most companies use for facial animation setup (facial action coding system)
Basically eckman broke down faces into movements called facial action units.. partly based on physiology
brow raises and the like 🙂
For some reason I was blanking on PID 😉
BTW guys.. highly recommend messing with Houdini 🙂 its super fun if you're at all into PCG
Given the PCG tools in UE are still a bit... underpowered
Its like a cross between programming, art and lego 🙂
Thank you for the input. yeah don't want to do a deep dive into AI for this project. I'll take a quick look at the new state tree, but if not, likely just dive into BTs
Guys, how to setup an EQS generator like Points so that it ignores the actor (Context) collision, I mean If I scale up the actor, the EQS does not work anymore, I'm basically generating a circle around an actor, but if I change the scale the EQS is broken and I can't find what option I need to set in order to just ignore that..
That doesn't make any sense. The generator doesn't take collision into account at all. The radius is set on the generator.
EQS is a nightmare to me.. Why the hell pathfinding test works correctly (1st pic) but when I move a bit the context, it does not work (2nd pic) At least if I understood correctly the red spheres items are the one that are filtered and navigable afaik
Also I had to put for the generator 'Trace mode' to 'Geometry by channel' and by default it is 'Navigation' but If I let 'Navigation' the generator simply does not work
as you can see, so @uneven cloud Thats what I was talking about with some kind of collision or whatever...
It still has nothing to do with collision. You have to increase the radius or the AI will never be able to pathfind. Putting the trace mode to geo isn't an actual fix.
It does not work even if I increase the radius which I tried
Have you tried adjusting the settings?
Yes I'm struggling since hours
I increased the radius, You can see here the 2 contexts have different scale in the scene and the EQS generates with 'Navigation' but doesn't for the other (the one I shown before which is bigger)
And I just noticed that even on the one with the EQS generated the pathfinding is still not working as you can see
The larger one has navigation issues. There's navigation built on top and likely inside. You need to fix that.
Humm, the problem is that I need to keep the navmesh that high, and since it is bigger actor, it is detected as navigable
That's not what I said to fix. There's a check box to fill inside with collision.
For being on top, you can add a nav mesh modifier component.
I'm sorry but which checkbox you talking about ?
I don't remember the exact name. It's something along the lines of what I already said.
Ok but where, Actor ? EQS, collision settings of the actor? I don't understand lol
Anyway it works now with the NavModifier set to Null for the 'Area class' thank you so much @uneven cloud !!
The actor. The thing that is affecting the nav mesh.
How can i make that my ai climbs on building to get to me. I know you can use nav links for jumping but what about climbing?
You can use nav links as well
But i thought nav links is for jumping and not for climbing
That is incorrect. Nav links are for any special navigation.
Hiw can i setup a climb navigation
By using a nav link. When the link is triggered, start the climbing functionality.
Alr
Do you think i can use this video for the climbing functionality for my AI bc this video is made for the character: https://youtu.be/WT_hIFudl6s
Hello guys, in this quick and simple tutorial we are going to continue with my UE5 RPG Tutorial Series in Unreal Engine 5!
↪️Project Files: https://bit.ly/GorkaGames_Patreon
Mantle Ledge Animation 💃 https://bit.ly/MantleLedge_Anim
➡️Whole Series: https://www.youtube.com/watch?v=FNTyIWkv5k8&list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi
Discord: http...
Of course i need to change some things
Hey guy I learnig how to make Ai grab and deplace some stuff if you ave any info or tuto useful to shear im glad to take it Thank you .
Hey guys, does anyone know how to make the NavMesh take the size of a static mesh?
I made a static mesh of city streets and I want the AI to be able to walk on only them, how do I get it done?
Are OnCeaseRelevant/OnNodeDeactivation/OnTaskFinished guaranteed to be called upon AAIController::OnUnPossess -> UBehaviorTreeComponent::StopTree(Forced) call? It's just that sometimes after NPC's death some resources that are released in those nodes functions are still acquired later in time as if OnCeaseRelevant was never called for a killed NPC 🤔
Typically any locomotion functionality that works for the player will work for the AI as long as you understand that triggering it is different. Not going to watch a tutorial to verify if that specific way works.
Area classes is how you change the way that AIs use the nav mesh. You can make everything nav area null and the roads default if you want
what if I have a detailed, large city and I want buildings to be null and roads default? Doing each manually would take up a huge amount of time right?
I did make a giant static mesh in the shape of the city that I could put on buildings and enable “Can ever affect Navmesh” thinking that would work but it didn’t, it doesn’t affect the navmesh at all
You need to set it on the individual actors. Of course turning off "can ever affect nav mesh" means that it doesn't affect the nav mesh.
They’re not static meshes, they’re Actors and they don’t have that doesn’t affect navmesh option.
It’s the CitySample map from the matrix demo which is procedurally generated which I think is why it’s built like this.
which is why I assumed completely covering them with a giant static mesh and playing with its navmesh settings would work, but it didn’t
it’s like it isnt even there
Do not use can ever affect navigation, unless you actually don't want it to affect navigation (hint you don't).
Not entirely certain why you are sending an image of the right click options, when changes to actors are in the details panel.
No the image was to show the type of all buildings on the map.
Okay how would you go about excluding all buildings (and sidewalks and anything that isn’t a street) from the Navmesh on a large scale?
You also made a false assumption that covering them with a giant static mesh is a viable solution.
If you want to exclude an area from AIs navigating, you set the area class to nav area null. Like I already told you.
I also made a static mesh that I could lay over the streets (well under) and my thinking was if I slightly elevate it the Navmeshbounds would just cover that and exclude everything else, still didn’t work
No I get that and yes it is the best solution but that would take me days if not weeks, to cover each building with a null modifier
buildings that aren’t all rectangles or squares either so I’m gonna need to shape the null modifiers to each individual one
You can add nav modifiers to large areas to set the area class. You can set the area class on an actor. You can add a nav modifier component to an actor.
Okay I’m getting the feeling this is getting frustrating for you and I apologize, I am a total and absolute beginner and talked myself into doing a school project which makes me fail a semester if i dont complete so im in a bit of a rough spot lol
but can you please elaborate? So I have a large city with streets and buildings and I would just add one massive modifier that covers the entire city then adjust what I want from each building (actor)?
It's frustrating when people don't listen. We take our time to answer and some of us have > 10 years of professional experience in UE.
I am listening, but again I don’t have enough (or any) experience to be able to implement the advice you’re giving me without more details
but I do appreciate your input, greatly.
No. That's not what I said. You have 3 tools available. Nav modifier volumes, Nav modifier components, actors have area class settings. Which one you use depends on what exactly you are trying to do. You should go try out the different options on a small test TO SEE WHAT THEY DO before you make a plan.
Okay I’ll try using this method and get back to you with how it turned out, thank you.
I guess it depends on the plugin. Mass, idk why you would. But ST - I could understand at least.
I would be fine with StateTree but Mass could be overkill if its not used, there arent any reasons to only use AIModule though
I'd appreciate Mass dependency to be separated as another module but I wouldnt mind that much either if it cant be - now thinking about it again, I actually wouldnt want mass to be an unconditional dependency to an AI plugin at all
Mass is treated as a generic ecs system rather than AI, and if its used it usually replaces AIModule (because it has its zonegraph thingy and massagents etc)
Does anyone know why a Navlink would work when traversing one-way (ie, right to left), but fail when set to both directions? I see that the ledge example says that both directions would fail, but I'm assuming that's due to the NPC trying to walk into a wall and failing. I'm seeing a complete failure when trying to get the NPC to walk through a door, which seems wrong
There's probably a checkbox for it to be both directions or one way
there's always a checkbox in UE 🙂
I used navlink proxies for doors and ladders and they did work, but it was a few years ago now, so can't remember the ins and outs
I think I used smart links and extended the code to add things like queueing/stacking up and that kind of stuff
Wasn't massively difficult
Anyone know how to make navmesh generate on procedural world's
I set it to dynamic but apparently that isn't the solution
That is part of the solution. Look at how the Cropout Sample project does it
I'm in the process of adding some EQS features to my plugin and had an EQS question for anyone with more intimate knowledge about the EQS system in general.
If I have an EQS generator with the first test as a trace test and set to filter only, I would expect that only the points which matched/passed the filter would make it through to the following tests and all other points excluded. In my test I can clearly see there are only 2 points that match the filter as they're blue if they match, but all of the points seem to be making it to the next tests which hurts performance if there are a lot of points from the generator.
Is there an EQS setting I'm missing which will prevent points which failed filter tests from being passed on to subsequent tests. Or is the behavior I'm experiencing by design?
I think I answered my own question after playing with it a bit more. I wrongly assumed the matched items for a filter were what should be passed on to the next test. It looks like it's actually the opposite, whatever items match the test are what is filtered out. Blue spheres = match/filtered out and red spheres = no match/pass on to next test.
I was thinking along the lines of filtering the results of a query/report where the items that match are what you get back.
If your EQS run mode is single result (default) and auto sort tests is on (default), then the most expensive filter only test will be run last. Also all tests are by default auto sorted by perf cost.
The EQS is time sliced, so perf shouldn't be a big worry. Don't go bonkers with pathfinding cost tests, but generally it's safe to do a lot with it.
Thanks for the info about those parameters.
Funny you mention the pathfinding tests because I'm specifically testing EQS pathing for my custom navigation/pathing plugin which generates navigation on all surfaces...pathing when all surfaces have navigation makes it a bit more expensive as well which was why I was trying to get the filtering correct.
Often times it's really down to user error. Pathfinding tests better as filters instead of path cost, because of how filtering works. You certainly do want project onto navigation functionality to early out on points that aren't valid.
is pawn sensing deprecated ?
how would i make a character move back to it's original position after sensing is done say i get out of range and it's not sensing anymore
or when it gets out of bounds for example, how to make the enemy move back to where it was, in particular how to know when that is happening so i can trigger it, i know i can use ai move to and get the original location, but i just don't know when to run it
Well, you can have a bool in your blackboard that is the sensed condition.. if its not true and you're not at your starting point.. simply go back to it
use that as a low priority in your tree
store your start location in the BB too
you might also want a "time since last sensed" value so you can loiter for a bit before going back
or a while the time since last sensed reaches a threshold, you do a looking around loop
store the last sensed position in the BB so you can wander around near it
And yeah, don't use pawn sensing.. use AIPerception
blackboard ? hmm, i'll look into this aiperception
Watch the video in the 3rd pinned message.
how do move ai in direction?
it doesn't recognise left or right, it just turns and walks there.
you mean you want to have sidestepping?
yeah
direction movement
right left back forward
in the simple AI move to there is a boolean to allow sidestepping
you should also be able to set the focus of an AI after starting the move to
where bool
what move to function are you using?
What is the AI: Move To Location Node in Unreal Engine 4
Source Files: https://github.com/MWadstein/wtf-hdi-files
what you're looking for is that "CanStrafe"
you're not using the same move to though
okay I now try
the character doesn't move like that
it just tries to turn but doesn't move from where it is
I guess strafe didn't work
No, it’s probably because you’re asking it to find a random reachable point in its own radius and giving it a really high acceptance rate, so it probably moves to the closest point to it, making the move imperceptible.
Idk what you’re trying to achieve exactly but I recommend you read up into the AI system some more. The 3rd pinned link video might help
I create a c++ files that inherited from NavMeshBoundsVolume, I set my file Blueprintable so I can use Navmesh with BP but when I compile it in editor error log is display:
"BP_Bounds contains invalid data".
How could I fix this?
I told him to move it from #blueprint
Altho this looks more like a #cpp issue the more I look at it 😅
Still don’t know why you don’t just add a navmesh tho
Ah
That's why I said to not crosspost
I hadn’t seen that
Why are you making your own move to task instead of using the built-in one? Not only does the built-in one cleanly aborts the move, but it allows for strafing. Don't reinvent the wheel!
Nav mesh bounds volumes only determine where the nav mesh is built. What functionality are you trying to override?
The bounds volume isn't the nav mesh. It doesn't generate the nav mesh. It's just the bounds.
I'm trying to follow VR Template that use navmeshvolume to check if certain position could be navigate by the user, with jump or teleport, I want have also some visible effect to show the user the bounds of nav mesh bound volume so I attach a Static Mesh to it but I'd like do a blueprint so my designer can just drop it in the scene.
Does the log say what data is invalid?
#cpp is so fucking toxic.
i been through that and cant find anything
i can not find a single thing about actually generating the navmesh from nothing in game
well in that case they generate it on top of a base landscape and then change it at runtime depending on how it gets procedurally modified. I believe to create nav meshes out of thin air you need nav invokers, tho that may be expensive?
i tried nav invokers and for some reason that did not work
im using procedural nav mesh component how can i set a mesh for it to use before it generates a new mesh in game?
I haven't played with the proc nav mesh, but maybe this will help: https://forums.unrealengine.com/t/navmesh-ignores-procedural-mesh/617843
thank you
oh crap it worked thank you so much
np 🙂
Hey friends, I have a basic IsInRange service set up here. Most examples pull of the "OtherActor" pin and use a GetPlayerCharacter (this is fine, my project is single player). However, here I want the AI to target a barricade (Pawn). Each barricade is randomly selected for each AI.
Does anyone have suggestions to get the range between the "ControlledPawn" and the barricade? I have the barricade (1 of 5 options is selected for each AI) saved on the blackboard as both an Object and a Vector (WorldLocation).
Just pull off the Get Value as Object pin and cast to actor if you know that will have a value.
Is this what you had in mind?
Awesome thanks for the quick response
Maybe I dont understand "Simple Parallel" as much as I thought I did. I am not able to get the "Print Attack" portion to run at all. Seems like either an issue with the service or simple parallel.
Use the gameplay debugger to check if your condition is met
I absolutely need to learn more about the debugger tool. This is soomething I have neglected for the past 5 years.
Here was my fix inside the service
Not sure why I was using the object reference instead of the vector I already had. thanks again @harsh storm and as always @dense owl
Do you want to attack the barricade while you are moving towards it? Is that blackboard condition ever true while you are moving?
No its only true when its super close. I realized this dosnt need to be a "Simple Paralel" but it works fine.
Well it actually dosnt work at all because the barricade is to short for the AI to overlap the barricade actor and trigger ApplyPointDamage, but thats a different issue im working on now
Then what you want is a sequence. Parallel is when they happen at the same time.
In my very short xp the times to use simple parallel are much more limited than it makes it seem
I’ve got a card game I’ve used a behavior tree on to sort through various plays by the ai player. For example there is a task at the bottom for play card from hand and one for flip card over. I have an end turn button that is set to run the behavior tree. At the end of each task is it sufficient to have a finish task node or should there be a stop logic node? Idea is that it will run the behavior tree fresh each time
I have never shipped a game with it.
Finish execute tells the tree the task was completed. Stop logic means stop the entire tree. Very diff things
This might be the first time I say this here ... I don't think a BT is a good option for you. Utility is a better option.
All tasks should finish. I would not stop logic from the tree. You should tell something else that the turn is done and have it handle pausing/restarting.
I have a very simple behavior tree for my monster AI, just following and attacking the player (check screenshot below).
When the monster dies, I play the death AnimMontage and I stop the behavior tree execution.
BUT for some reason i feel like the behavior tree is still running and as a result I have a monster which keeps switching back from attack and death animation very fast (check video below).
This is the code I use to stop my behavior tree:
Parent Class (set IsDead to TRUE, and play the AnimMontage).
{
IsDead = true;
// Play Death Montage
PlayAnimMontage(DeathMontage);
}```
Monster Class (call the parent Die() and stop the BehaviorTree)
```void ACharacterMob::Die()
{
Super::Die();
// Stop Behavior Tree
AMobAIController* MobAIController = Cast<AMobAIController>(GetController());
if (MobAIController)
{
MobAIController->GetBehaviorTreeComponent()->StopTree(EBTStopMode::Type::Safe);
}
}```
I've been trying to solve this problem for hours, but I don't seem to find a solution to it.
Thank you in advance for the help!
Can you share some lines of code on its implementation ? So you saying pool ao characters and controllers
yes i pool them
we have an interface
UINTERFACE(BlueprintType)
class UPoolableActorInterface : public UInterface
{
public:
GENERATED_BODY()
};
/**
*
*/
class IPoolableActorInterface : public IInterface
{
GENERATED_BODY()
public:
/* Called on the Actor after being released from the pool */
virtual void ReleasedFromPool(const FTransform& Transform) = 0;
/* Called on the Actor before being returned to the Pool */
virtual void ReturnedToPool() = 0;
UFUNCTION(BlueprintImplementableEvent, Category = "PoolSystem")
void NotifyReturnedToPool();
UFUNCTION(BlueprintImplementableEvent, Category = "PoolSystem")
void NotifyReleasedFromPool();
};```
Hi, Can I use delay nodes and event dispatcher bindings in Behavior Tree Tasks safely?
I have an ai system where npc has a bunch of "behavior states" he can be in and base on that the behavior tree chooses which "subroutine" npc should perform (idle, follow, work, flee etc). The subroutines themselvers are a collections of nodes in sequence for example for work state:
find place to work->moveto->correct rotation and location->start working->end work
Its my own system but conceptually based on AIBehaviorToolkit from marketplace.
Working can be for example going to the bench and sit on it for a while, then stand up and in next sequence iteration go somewhere else. These BTT nodes usually have bindings and delay nodes when for example we wait for npc sitting animation to reach certain state (sit_start) and then loop the sitting itself for configured amount of time and after that starting sit_end phase.
My concern is that BT itself is not a state machine, it can decide in any moment that current BTT is going to be aborted and go somewhere else (we can damage npc for example so it will stop working and go into some other state). So it feels like what i am doing inside those BTT and the way i sequence multiple of them is not a correct way of using BT. What happens with binding and delays when BT aborts current BTT and moves the execution to other part of the tree?
The engine provided nodes like MoveTo i assume always work correctly because when aborted npc simply stops walking towards destination so the abort signal is handled by MoveTo node. But my own nodes do not have any way to react properly for such situation unless engine somehow knows how to cancel any logic happening there.
VLogSolsticePooling
Are you sure you're not breaking NDA haha 😅
I solved by using the unpossess function on death. (not sure why without it is not working.. but whatever xD)
Just wanted to share this about the Cone Check Decorator:
I found out that the Cone Direction parameter actually expects a location (where the cone should be pointed at) rather than a direction vector.
(Which is confusing imho.)
The engine code for reference which is used to calculate the direction of the cone:
bool UBTDecorator_ConeCheck::CalculateDirection(const UBlackboardComponent* BlackboardComp, const FBlackboardKeySelector& Origin, const FBlackboardKeySelector& End, FVector& Direction) const
{
FVector PointA = FVector::ZeroVector;
FVector PointB = FVector::ZeroVector;
FRotator Rotation = FRotator::ZeroRotator;
if (BlackboardComp)
{
if (End.IsNone())
{
if (BlackboardComp->GetRotationFromEntry(Origin.GetSelectedKeyID(), Rotation))
{
Direction = Rotation.Vector();
return true;
}
}
else if (BlackboardComp->GetLocationFromEntry(Origin.GetSelectedKeyID(), PointA) && BlackboardComp->GetLocationFromEntry(End.GetSelectedKeyID(), PointB))
{
Direction = (PointB - PointA).GetSafeNormal();
return true;
}
}
return false;
}
FORCEINLINE bool UBTDecorator_ConeCheck::CalcConditionImpl(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const
{
const UBlackboardComponent* BBComponent = OwnerComp.GetBlackboardComponent();
FVector ConeDir;
FVector DirectionToObserve;
return CalculateDirection(BBComponent, ConeOrigin, Observed, DirectionToObserve)
&& CalculateDirection(BBComponent, ConeOrigin, ConeDirection, ConeDir)
&& ConeDir.CosineAngle2D(DirectionToObserve) > ConeHalfAngleDot;
}
Solstice is his side project if I recall. If so, I'd hope that he's not breaking his own NDA 🤣
The Red Solstice 2 is their shipped game
Don't use delay nodes, as they are just timers you can't abort. Use a timer. Delegates are great.
All of your tasks must be able to cleanly abort. There is a function to override for when the abort happens. Animations need to stop. Delegates need to be unbinded.
BTs are not state machines. What you describe is a common way to set it up, but does lose a lot of the power of a BT. If it's working for you (once you clean it up and abort properly), then you don't need to change it. The only "right way" to do things is the way that makes things work.
I think it's quite a challenge for people to make that conceptual jump from SM to BT. Which is why a lot of BTs end up being semi-SMs (mine included 😅)
I find that I most often do a "state" to be like a sequence node and then wire up the tasks (obviously). And then the selector at the root picking the right "state" to execute.
And if it is reusable (like a wandering/idle thing), make it its own BT and then use a run bt task
I do state machine inside of the BTTasks
but then utter lack of control over BTs execution flow gets me somewhere after some point
I don't know if how I do it is "proper", but it works and is modular. So it is fine for me.
My dream is a uni-graph where we can do both SM and BT alongside with utility selectors
Only if I was good at slate 
I do mine as a utility state machine and each state has a BT. But I do that outside of the tree. So that means I have the other benefits of a SM.
slate 4 lyfe 🙂
Pretty sure the guys working on Division had that.. SM's and BT's all over. But then their graphs were crazy 🙂
Related to the above: I have a state machine where each state calls into an individual behavior tree. This lets me decide high-level transitions (e.g., from idle to patrol), but keep the implementation, of say the patrol state, inside behavior trees.
I am running into a hiccup, though. Some trees should only "execute once" -- for example, the investigation tree moves to a few locations, plays a few animations, and then it should transfer back into the patrol state. Is there a cleaner way of knowing when a behavior tree has "finished" without writing to flags on the blackboard (Investigation_IsStarted, Investigation_IsFinished, etc.)?
I just have one flag, bInvestigate on the blackboard. Then in my sequence behavior that handles the investigate stuff, I loop it X times
After that is all said and done, it flips that flag.
When do you reset it?
After the investigate stuff is over.
But as I described above, the way I write BTs might not be the same way that you do 😅
It sounds like that's the easiest thing for me to do. I'm a little afraid of my BT/BB logic bleeding into my state machine, but I think your approach makes sense!
Part of the problem, is you're trying to get BT's to handle state transitions.. BT's aren't really about state transitions.. they're about priority selection
The BTs don't handle my transitions (that's in the state machine), but the state machine needs some way to know when a BT is done, for lack of a better phrase. But that sort of flies in the face of BTs are rather continuous
(I say that because I initially handled transitions in BTs, and I learned my hard won lesson. :D)
Exactly.. BT's generally respond to changes in the BB
so if you're after state, then its got to be in the BB somewhere right?
That's how I use them. Then the behavior that I want most to happen is on the left and things get gated by conditions until the last behavior.
Here's a picture if it makes more sense than my muddled explanation
The transitions are the white circles, and when a state is hit, it stops the previous BT and runs the new one
so each BT really has no concept of what it's connected to
Hmm, seems kind of redundant.. not sure why you'd need a SM there
In my (limited) experience, bundling the states inside the BTs makes them quite broad and the leaves are very order dependant
They only have BTs, judging by GDC presentations
and job openings 😄
they try to make it clear they want you to be good at BTs
Well, its mostly BT's but I'm sure I saw them talking about SM's somewhere in that massive noodle soup of nodes 🙂
I think you need other way around
Your states can be expressed in BTs perfectly
but their sub-nodes might want a SM instead
For me, each of those "states" would be a sequence node and the tasks are just small units of work that when completed, finish the "Investigate" behavior.
SM: I want to jump to arbitrary nodes from any node, based on given conditions
BT: I want to switch between prior tasks fluidly by controlling conditions all over the place
I think you missed something... SM: I want to invade all nodes with transition conditions for every other node exponentially 😉
Conduit to save us 
Seriously zoombapup, modern FSMs arent that bad 😄
once you get UX done
I guess its all good 😉
Yeah, I'm just ragging on FSM for the giggles
HFSM are actually kind of useful in certain areas after all.
HFSM to the rescue! Because your SM needs another SM to manage it!
This makes sense, thanks all. I do wonder if I would run into headaches when certain BT nodes need a sequence of events to fire that a FSM might encode better, but probably very project dependant, I imagine
Hell, if statetree ever gets finished, I might even be tempted to try it 🙂
I'm not a ST fan anymore
I was going to try ST again when I start on my boss behavior. If it is still buggy, I'm just doin' good ol' SM.
mattg: sequence is a node in a BT, to make sequences of actions.. I mean can't really get much clearer than that
Sequence was probably badly worded. I mean... it's easier to encode in a state machine certain things (e.g., you can only investigate after you patrol) then it is with flags in a BB
I've chosen my hierarchical hill to die on
To be fair, you can implement FSM,HFSM and BT's in about a day each if you eschew the UI sillyness (which you absolutely can)
I think what I'm learning from this conversation is that BTs can do more than I give them credit for
I love BTs personally
And ditto for utility.. I mean Kevin Dill used XML (ptooey) which I believe was used in Red Dead 1?
Granted my main experience from them is through UE.
I love the idea of building small tasks and then just building up behaviors like a Lego piece
Its fast, fluid, dynamic, expressive (UE is not expressive as other BTs)
its a great concept
BT's are just a different way of thinking, speaking as someone who spent years doing various forms of FSM's, I think that mental model change was required
States get too unwieldy at a certain size.
and I see a lot of people not using the right mental model of the BT
they're not thinking "what has higher priority than this"
so for instance, I often see people with BT's that have no idle behaviour.. which is weird to me
for the most part you can "code" your BT by simply asking a designer to sort their behaviour in priority order
My idle behavior is typically the only behavior that doesn't have some kind of gate decorator on it. As well as, typically being on the lowest priority
Yeah, which is good practice.. at least give it an idle anim to fall back to
Now, my current challenge is how to do multi-agent coordination between a human and an AI in an overcooked style game 🙂
and then use reinforcement learning to learn the same behaviour but make it more human
Plate Up! > Overcooked. Fite me 🤛
Encoding cooking games in BT's is kind of fun
I wanted overcooked because its simpler
talking about ML.. OpenCV wasnt easy peasy 
why is it all cooking games
doesnt seemed very beginner friendly (and couldnt find any face expression tracker out of the box anywhere)
cooking games are fun
oh, sry I missed the initial comment 😬
You mean its a bit verbose?? I'll give you that.. but there's a billion tutorials on youtube for it and it really is like 5 lines of code 😉
reinforcement learning is only 5 lines of code?
oh.. youtube tutorials 😄 Well I've forbid youtube for tutorials thanks to UE a while ago so never thought of it haha
What is?
no, opencv based face detection and tracking
Oh, OpenCV is?
OpenCV is a really common open source computer vision library
Thats about 20 lines of code 🙂
my antivirus didnt like this 
doesnt let me in
but I found the source
anti virus for a website?
sure, its called internet security 😄
oh you mean the code?
no the webpage itself
web pages have virus's now?
One thing I don't feel like I use enough in the BT toolkit for UE are decorators and services to be honest. I mostly just use the decorator one about a BB key being set 😅
prly the most common one tbh
I run my EQS as a service, task didn't work well for me
Yeah, you can get a long way with that type of decorator
its suspicious of JS source code of it, but I know there isnt any virus
its just too overprotective and not letting me in xD
strikers? I've been on strike recently yeah
i heard teachers not graduating students 😅
there's a lot of industrial action going on right now
but we've got a govt who doesn't give a shit because they know they're out in the next election
so they're sowing chaos as quickly as possible
I've almost finished making the 3D models for my Overcooked research "game" using Houdini and some other PCG stuff
bask in the glory 🙂
infinite cooking 🙂
hahaha
hey guys does one of you know a finished framework for unreal in the marketplace which is similar to the action shown in the video. A fighting melee ai? I'm not necessarily talking about ragdolls or weapons, but rather about the various animation options such as dodging, rolling after a hit and so on. I think it looks super dynamic and is really fun to watch. And i dont need that smart learning AI Stuff
NPC Wars in Overgrowth with Active Ragdoll Physics. We are watching Smart AI fight eachother in a simulation with Active Ragdoll Physics, in Overgrowth NPC Wars. Smart AI Learns to fight.
Smart AI team (GREG & REX) is learning to fight & use weapons to beat the Ragdoll Army.
NPCs are fighting eachother with Active Ragdoll Physics in Overgrowth...
looks a lot like that bunny combat game by wolfire
overgrowth 🙂 blanked on the name for a minute
yeah its a mod
I think they released the source code to overgrowth didn't they? made it a community thing?
Don't think I've seen anything like that on the marketplace
Task for EQS works fine for me. What kind of stuff are you doin' in the EQS for the service?
updating target actors
Luthage had said to just run EQS as a task to get the actor and use a service only to update the location, but it wasn't working in my use case, can't rmbr why. Plus, if it works...😅
If it works and meets your requirements - SHIP IT!
He speaketh the trutheth
I have a request state change task to do this. All it does is tell the state machine to request the end state of the current state.
Ah, that is exactly what I need, thank you! The task communicates up to the state machine!
Is there a way to change the acceptable radius number on a moveto node to a random number in range?
Afaik, Not from the tree node, you’d have to use a normal AIMoveTo node
But you could put that in a task technically
Either that or make an EQS context around the target and make it move to one of those vectors instead of your TargetObject
So you can set that to random beforehand
thats a big brain move
Nvr done it myself so disclaimer 😅
Hey ! has anyone here used detour crowd and has a good understanding of the visual debug it offers ? the whole thing is useful but quite obscure 🙂
can somebody remind me an answer to my own question 🙈 ? I believe the answer is yes and AFAIR I've been doing this extensively some time ago but I still doubt my memory about this and just want to double check
Has anyone used www.loci.ai? Seems to be a neat API for automatically tagging assets. You can upload a test asset on the homepage too.
Loci is a machine learning platform for searching, tagging and creating 3D assets
Quick question. I've made a basic AI controller, tree and BP, and everything is working fine EXCEPT my AI is seemingly not changing sequence upon sight while already in a sequence.
I've poked around with it for a bit, but I'm sure I'm only missing a toggle or something somewhere. Any quick solutions for this?
All works fine, but I MUST be within sight on the end of "wait" period from the patrol seaquence in order for chase sequence to begin. It does not switch to chase on sight during patrol.