Пікірлер
@_gooseduck
@_gooseduck Сағат бұрын
Thank you for the great video !
@Sag_47
@Sag_47 10 сағат бұрын
I just finished adding a bow and arrow to my project, and this explanation was wonderful and useful, thanks
@Codie1337
@Codie1337 15 сағат бұрын
Hey bro, great video. I love the organisation and reusability of the code. But I was quite suprised at around @47:00 when you copy and pasted that big chunk of sphere trace code. Is it not possible to put that in a function so that we can keep things tidy?
@pimeine
@pimeine 16 сағат бұрын
Hello, I'm not sure if it's due to my Unreal Engine version (I haven't tested yet on UE5+, currently in 4.23), but when I submit any changes, the status is empty in the bash command line but I still need to push to the branch to have the online repository updated. Is it normal? And thank you for the video! ❤ I've tried on my own month ago but wasn't managing to make it work, now I understand (Got a funny issue with credentials because I was using another account and had to manually update it from the Control Panel xD)
@jhonsommer9330
@jhonsommer9330 17 сағат бұрын
Thanks for the tutorial. I had the Problem that my AI still moved to the acceptable Radius before strafing even though the Branch it self was aborted because the distance was to big. What worked for me was on the Event Receive Abort AI use the Stop Movement Node. Then the AI really stops how i wanted. I have a different Behavior tree so that's maybe why it didn't work like in the tutorial
@mamboroberts
@mamboroberts 17 сағат бұрын
Really appreciate the series Ali. Your skills and training delivery are first class. I've learned so much and enjoyed every episode. Comments on your feed echo this constantly so I really do hope you know how much the UE community appreciates you. Much respect.
@LeateqOfficial
@LeateqOfficial Күн бұрын
Awesome ! Thank you
@AliElZoheiry
@AliElZoheiry Күн бұрын
You're very welcome 🙏 glad you enjoyed it and thank you for watching!
@LeateqOfficial
@LeateqOfficial Күн бұрын
@@AliElZoheiry no problem ! really love your tutorials, and would be cool to see some on parkour systems ^^
@alvesesquilo
@alvesesquilo Күн бұрын
In the last part of the video, even putting the 7s cooldown for the spinning attack, it still use the spinning first and only then runs the cooldown. What should I change so the cooldown prevents the enemy to start with the spinning just like yours?
@SpamVhpl
@SpamVhpl Күн бұрын
commenting for algorithm too, this channel is worth gold
@OpinionatedHuman
@OpinionatedHuman 2 күн бұрын
Amazingly detailed enough for me to implement it for something totally different I was saving, thank you!
@autodidactgarage
@autodidactgarage 2 күн бұрын
I've been binge watching your videos for the last 3 days straight. Absolutely the best UE content on KZfaq. You are an incredible teacher and the content is fantastic. That being said, I hope you can help. I just spent 5 hours debugging a strange issue (with the help of your debug video) and finally figured out the BPI_Damageable interface functions on BP_Enemy are getting wiped out / reset when I close UE5. The implementations persist on BP_Player but the Enemy keeps losing this code. Any idea why that would happen, or how to fix it?
@minidinogamer
@minidinogamer 2 күн бұрын
Hey Ali! Thank you for updating the attack system, it's going to be so much easier creating new enemies after I finish this tutorial. I am having an issue that I have been stumped on for about an hour. For the ground smash attack, it works for the melee enemy but not the mage enemy. I get an error pointing me towards the "BTT_MageAttack" "Ground Smash Attack" function, so I placed a print string and that works fine. Also, in the Behaviour Tree, it gets stuck on the "Ground Smash Attack" unless I hit the enemy. Would you have any ideas what's happening with the mage enemy?
@Leo7531
@Leo7531 2 күн бұрын
not sure if im doing something incorrectly, but i completed the tutorial and im still getting the error mentioned at 9:05 . it would seem that unreal has something in place to destroy the actors regardless of what i do, so they are spawned in with the correct pool size, but seconds later are destroyed even when replacing the destroy actor with SetInUse function call not sure whats causing this
@ORPsanimation
@ORPsanimation 2 күн бұрын
a a a a a
@agustintoselli
@agustintoselli 2 күн бұрын
Hi Ali, another amazing and very in depth video, thanks for being such a great teacher! I was able to save correctly but i have a bit of trouble since we put the "use player data" in the begin play: in my set up i have several heroes that the player switches at runtime (i summon the "new one" and then destroy the "old one"). This used to work ok, but now it takes me to my last checkpoint. Any suggestions on where / how i should be calling the use player data? Thanks in advance, and for answering so fast always, even in old videos
@twelvegrain1111
@twelvegrain1111 2 күн бұрын
How are these tutorials so good?! It's actually fun to see how it all fits together. I never thought AI tutorials would be entertaining. Haha. Thank you, sir!
@GemGameDev
@GemGameDev 2 күн бұрын
This Tutorial is amazing and makes me want to learn more Software Design Patterns! Thanks for the inspiration Ali <3
@twelvegrain1111
@twelvegrain1111 2 күн бұрын
This, truly, is a fantastic series. You're explanation is so well thought out and easy to follow, especially for someone like me who is just getting started. Between blackboards, AnimBPs, AI states, EQS, there are so many ways to get lost and overwhelmed when trying to follow along with the logic. You are making this possible to understand. I'd be totally lost without this series. Thank you, many time over!
@rashidfarhan6223
@rashidfarhan6223 2 күн бұрын
Make sure your colliders are at root otherwise collision may not happen
@ekxnz2
@ekxnz2 2 күн бұрын
Can I copy your stuff for my game?
@siwatbas
@siwatbas 2 күн бұрын
1:12 I like how you explain like this. It is very easy to understand. well done topic too
@alexkenley1
@alexkenley1 3 күн бұрын
nice one dude thanks
@bevadevs
@bevadevs 3 күн бұрын
thank you very much for your very complete tutorial, you're a life saviour!
@user-kb2qz3gj6k
@user-kb2qz3gj6k 3 күн бұрын
awesome bro
@rahulvyas4020
@rahulvyas4020 3 күн бұрын
So, the enemy I am using is not wielding a sword but is attacking by slashing its wings; that is part of its mesh. Do I make any separate tasks like wield - sword just in case the collusion part comes in and health and damage are involved? Or should I end the video before the sword part as I am not using the sword strike animation? Like my enemy does not use sword, so, I hope I can use its fists or wings attack animation as task for damage.
@shush4
@shush4 3 күн бұрын
Do you shave that scar into your eyebrow
@qasimimtiaz697
@qasimimtiaz697 3 күн бұрын
can you please guide me on how to save the level name if you have multiple levels in your game
@Sag_47
@Sag_47 3 күн бұрын
Nice tutorial, in my character movement when I set orient rotation and use controller to true or false nothing change any idea why?
@scienceandtorah7668
@scienceandtorah7668 3 күн бұрын
I've been really enjoying the tutorials. The thing I like about them is that you explain everything very well, unlike some other tutorials that don't really explain what they're doing in their code. Keep up the good work!
@DeadMeatxx
@DeadMeatxx 3 күн бұрын
Just came across your channel and the tutorials really help! I was wondering if you will ever do dev vlogs for your game that your working on? Dev vlogs tend to get more reach
@JC-nx3lk
@JC-nx3lk 4 күн бұрын
Get this man more Subs and likes, please!
@JC-nx3lk
@JC-nx3lk 4 күн бұрын
Great video, thank you. Clear explanation and examples. Shocking how difficult it is to find this kind of information in such a concise way. Subbed, please keep up the great work.
@MatthewPymAnimations
@MatthewPymAnimations 4 күн бұрын
That was great, I learned something new. Thank you so much. I'll be coming back to this video a few times I think for use in my own project 🙂
@saketrungta5032
@saketrungta5032 4 күн бұрын
I am looking to lear more about game development, I am genuinely curious to know how do you come across such concepts or how can someone like me learn such things
@rashidfarhan6223
@rashidfarhan6223 4 күн бұрын
for someone who has learnt unity and has been a professional for 4 years, Your content seems like the best to get started from!(after watching some beginner stuff from unreal sensei)
@ProcessBlueProductions
@ProcessBlueProductions 4 күн бұрын
Really enjoying your channel. I paused the Enemy AI series to side quest for this excellent damage system. I hope your cat gets some screen time someday lol
@krakencodegames1366
@krakencodegames1366 4 күн бұрын
Great video man, thanks for posting
@HiddenWorldsLLC
@HiddenWorldsLLC 4 күн бұрын
What people fail to realize is you have to call the function you use when loading your game, meaning if you have a attach weapon to socket you have to call that, the game won't automatically do that just because you save and load that your character has an axe in its hand, if you have an inventory system you have to add all of the saved items back in the inventory as if they where being picked up from the world.
@HiddenWorldsLLC
@HiddenWorldsLLC 4 күн бұрын
You should look into using choosers if you have not already
@AliElZoheiry
@AliElZoheiry Күн бұрын
Is that a plugin?
@HiddenWorldsLLC
@HiddenWorldsLLC Күн бұрын
@@AliElZoheiry it is motion matching, the 500+ animation project they just released, it's a very performant way to do complex animations. It is deprecating the anim state tree.
@AliElZoheiry
@AliElZoheiry Күн бұрын
@@HiddenWorldsLLC ahh that's what you mean. Yeah I tried it out! Very cool technology. Though I wouldn't say it's deprecating the animation state machine, as motion matching is a different way of doing animations and requires a huge database of different animations and poses. I would say it's better for realism and complex movement, but state machines will still be used widely
@HiddenWorldsLLC
@HiddenWorldsLLC 19 сағат бұрын
@@AliElZoheiry You have links disabled so I cant even post a name of a video but the GDC they did recently and the video they did all the way back in 2016 about motion matching, they are saying they want to replace the state tree with motion matching like the Enhanced Input System, Niagara, and other things. From what I have seen, when they say they want to deprecate something they make it happen. It may not be tomorrow, this year, or next year but eventually I think it will happen. This doesn't mean you can't still use these systems, but they are deprecating things for a reason. Niagara was a HUGE update to particle systems, Enhanced Input gives you so much more control over your players Inputs. Motion Matching is also so much better than a state tree. This does not mean you cant use it but there is a reason they put so much emphasis on Motion Matching.
@gabigeorgescu6404
@gabigeorgescu6404 4 күн бұрын
How is this a tutorial?
@Jabolaso
@Jabolaso 4 күн бұрын
why use publisher and subsriber method when you can just use Get Widget of class and Trigger the event or function from Widget when Enemy Died. this way its a one way method. and you can avoid a tons of reference from the enemies. and for many use cases if Enemy Just Spawned/respawned then you have to rerun your Get Actor of All class again and again, which is very bad for performance. And in Level you can use Dispatcher from Widget and call when Enemy Count is decreased to open the door.
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
I get that question a lot, and it seems like the most intuitive thing to do. But is actually the same exact thing I am trying to avoid here. Which is create a dependency between the widget and the other actors (e.g the enemy and the door) Because imagine this scenario. You decide one day to remove the widget from your level, and replace it with something else. Suddenly the door stops working 😅 and you have to rebuild the mechanism for opening the door somewhere else. Pretty strange for a UI element to control a gameplay mechanic, that's why creating unwanted dependencies can cause a lot of problems when making changes in your game down the line. and trust me, you will always be making changes
@Jabolaso
@Jabolaso 2 күн бұрын
@@AliElZoheiry the Get Widget class is the lazy way to trigger the widget event. you can do it via Interface. use User Widget Object. send it to actor and let the actor do the bpi thing. so no reference on each other. but this case im talking about is the one you demos in the video, other scenario is different. i have done similar thing in my ongoing framework project. in my Actor Component which haves the HUD init. i have the User Widget Object saved there as variable ( not the hard reference of the Widget) and i trigger every Widget events store in that Main HUD UI by having other widget as a child via UI Interface. this method has no Reference to actor and to the widget vice versa. im still learning things, so i followed you , hoped you share more good ideas. dont get annoyed if comments like this appear. its just a dev convo , so i can learned more. ty
@AliElZoheiry
@AliElZoheiry 2 күн бұрын
@@Jabolaso hey, I think you missed the 2nd part of this series. The next video on dependencies is the one that tackles this problem. Check it out and let me know if it answers your questions
@HiddenWorldsLLC
@HiddenWorldsLLC 4 күн бұрын
I have found weird bugs in 5.4.1 with collapsing nodes avoid that particular thing if you can
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
Hey there! Thanks for the heads-up! I'll make sure to test it out in 5.4
@HiddenWorldsLLC
@HiddenWorldsLLC 4 күн бұрын
​​@@AliElZoheiry just to be clear in not talking about collapsing to functions or macros it is specific to nodes in event graph at 4:00 i just create new event graphs if i want to clean up like that like having a debug graph stats graph quests graph, it's a good alternative
@-RiSK-AK
@-RiSK-AK 4 күн бұрын
Thanks for the tips, God bless you, wearing necklace for men is haram so avoid it 🌹
@atennop
@atennop 4 күн бұрын
It all depends on the context. You cannot say that a reference to an object is always bad, and an observer is always good, or vice versa. Control flow is important. In many cases, a direct reference to an object and pushing its methods is better suited, for example, when developing a health system, a health component can refer to a widget and tell it what to display and when, and the widget will already think about how to display it. This is simply more logical, the model pushes the view, and there is no strong coupling; you can use interfaces to remove it altogether.
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
Indeed, it all comes down to the specific requirements and architecture of the system being developed. Nothing is black and white in software development, and there are always trade offs. Thank you for sharing your insights!
@falra_erisian
@falra_erisian 4 күн бұрын
About usage of the OnTargetPerceptionForgotten You need to enable the Forget Stale Actors in project settings (Engine - AI System) And it looks like working as it should - fire when the age of the sense stimulus expired
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
Hey there! Thank you for your comment and sharing that tip with us. It's really helpful for anyone encountering the same issue. Keep up the good work!
@Hunt4Glory
@Hunt4Glory 4 күн бұрын
If i subscribe to your patron is their a way to import this bow mechanic?
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
Hey there! Through my patreon you can download the entire project, and migrate any assets you want to your own project, just like I do in the next part of this series (Where I migrate the bow to my other Enemy AI project)
@Hunt4Glory
@Hunt4Glory 4 күн бұрын
@@AliElZoheiry thankyou!
@Jabolaso
@Jabolaso 4 күн бұрын
interesting method, this is why game become too laggy after spawning some shit like , niagara, cascacde or any objects even after deleting them. i have a hunch that memory still keeps even after deleting them, this proves the theory correct. my only concern is if the actors are loaded in memory as initialize method, what if i have a lot of players , does this not affect or have any side effect to other players nearby? since the actors are just hidden even if its not ticking and not visible, clients are still aware on the pooled objects. and resulting more a lot of memory for everyone instead of spawning and destroying it. Unless probably spawning it as a non replicated and toggling the replication at runtime which is not probably possible atm.
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
For multiplayer, you have to think about a whole array of different things. So it's not that a design pattern that works for single player can work for multiplayer as well. It highly depends on how you want the projectiles to be replicated. I try not to go into multiplayer in my tutorials, because it really multiplies the scope x10, and is highly highly dependent on the type of game you're making
@gamedev_pc
@gamedev_pc 5 күн бұрын
In my project the arrow is facing down after detach. Can you tell me the solution.
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
At 19:34 I explain that this could happen if the mesh itself isn't pointing to the X axis, check out that part and make sure your arrow is transformed the same as mine
@gamedev_pc
@gamedev_pc 4 күн бұрын
@@AliElZoheiry hey the mesh was pointing z axis . I changed it and now it's working properly thanks bro.
@HiddenWorldsLLC
@HiddenWorldsLLC 5 күн бұрын
Finally a tutorial series i can recommend new people to watch
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
Glad to hear you've found the tutorials helpful! Thank you for the recommendation. 🙏
@HiddenWorldsLLC
@HiddenWorldsLLC 4 күн бұрын
@@AliElZoheiry i already know the things you teach but i like to see other people's implementation of mechanics and you and i build almost identical systems and i have people ask about things all the time and a lot of tutorials on yt are very basic and they just try to get the job done as quick as possible which is good if you are a beginner just looking to learn things but it is not good for a full game.
@user-xu6jj1sw7q
@user-xu6jj1sw7q 5 күн бұрын
Awesome tutorial and series. Just FYI I spent hours on this EQS find cover on UE 5.4.. while the testing pawn was fine with the query my IA didn't like it, just stayed there on starting point. all fixed after i set item and context offset to 0. in the end i resolved with '60' which i think is a good compromise for now.
@AliElZoheiry
@AliElZoheiry 4 күн бұрын
Glad to hear you were able to resolve the issue! Setting the item and context offset can make a big difference in how the AI interprets the query. Sounds like you found a good compromise for now. Keep up the great work!