Smart Enemy AI | (Part 7: Damage System) | Tutorial in Unreal Engine 5 (UE5)

  Рет қаралды 25,197

Ali Elzoheiry

Ali Elzoheiry

Күн бұрын

In this Unreal Engine Game development Tutorial you will learn the following:
- Integrating a Damage System Component with our enemy AI
- Hit Reactions/Responses: How to get the enemy AI to do "Hit Responses or Reactions" when damaged
- Death: How to implement a death state for our enemy AI and our Player
- Interrupts: How to prevent the enemy from being interrupted when doing certain high priority actions
Link to my Patreon (Thank you for your support)
/ alizoh
Link to part 1 of the "Smart Enemy AI" tutorial:
• Smart Enemy AI | (Part...
Link to the "Damage System" tutorial:
• How to Build a Combat ...
Link to the "Projectile System" tutorial:
• How to Shoot Projectil...
Link to my "AOE Damage & Healing" tutorial:
• How to do AOE damage a...
About me:
I've been learning game development for a few years now, I do have a background in software engineering, and I also have a background in education, so being able to combine my love of gaming and love of education is the best way to spend my time.
I am currently working on this 3rd person action adventure game as a hobby, but I am also trying to build a community, thus I am creating KZbin tutorials to find others who are interested in game development and design.
If you are interested in learning more or if you are interested in working together, please let me know in the comments.
Join my Discord server to chat and mingle with the community
/ discord
If you would like to support me on Patreon, you will get access to all the source code from every video I post as well as any custom assets that I create. Also I would be forever thankful to my early adopters
/ alizoh
Checkout my other tutorials on my channel:
/ @alielzoheiry
Chapters:
00:00 Outcome of this part
00:50 Recap of what we have so far
01:45 Migrating the Damage System
03:46 Animations I'll Be Using
04:20 Using the Damage System
19:27 Health Bar for the Enemy
21:45 Fixing Very Important Bug
24:14 Adding Damage To Enemy Attacks
31:40 Death Functionality for Enemy
39:07 How to Use Services in Behavior Trees
44:47 Health Bar for the Player
46:31 Death Functionality for Player
48:01 Hit Reactions/Responses
01:03:40 Preventing Interrupt When Attacking
01:05:06 Next Up in Part 8
#unrealengine #unrealengine5 #ue5 #gamedev #smart #enemy #combat #AI #blueprint #tutorial #behavior #tree #ranged #melee #EQS #damage #system

Пікірлер: 196
@xphasic636
@xphasic636 7 ай бұрын
23:11 Iconic Line right there
@AliElZoheiry
@AliElZoheiry 7 ай бұрын
Hahaha about deleting the child 😂?
@xphasic636
@xphasic636 7 ай бұрын
@@AliElZoheiry Yeah that made me giggle 😂 amazing tutorials btw
@williamwasd1387
@williamwasd1387 2 ай бұрын
I know this is old but i clicked your timestamp and it took me 5 solid seconds to process what he said, thanks for the laugh lol
@SWVNGGVNG
@SWVNGGVNG 5 ай бұрын
Many will use this series as a reference for years to come. great job bro.
@AliElZoheiry
@AliElZoheiry 5 ай бұрын
Thank you for saying that man, I really hope it helps people 🙏
@Josh_Alfaro
@Josh_Alfaro 2 ай бұрын
Ali, once again, you’ve proven to be the best YT instructor on this. I know I’ve commented on your content before. But I just have to say how much you are appreciated by the gamedev community. God bless you sir🙏🏻
@AliElZoheiry
@AliElZoheiry 2 ай бұрын
Thank you so much for your kind words and support! I truly appreciate it 🙏
@Josh_Alfaro
@Josh_Alfaro Ай бұрын
@@AliElZoheiry For some reason, where implementing the Damage system OnDeath event, it does not work on my BP_Player at all. I have added both the BPI Interface and the damage system actor component. But the player just doesn't take damage or die. It works for the enemy AI but not for the player. The only thing i didn't do was add health bars to either the player or enemy AI's, but the events work for them, just not the player. Any tips?
@waadi3ach569
@waadi3ach569 Ай бұрын
@@Josh_Alfaro i havent gotten to this vid yet, but general practice is to add Printstrings everywhere, they will help you catch at which point the problem occurs.
@Josh_Alfaro
@Josh_Alfaro Ай бұрын
@@waadi3ach569 ok thanks
@vidmaster7
@vidmaster7 10 ай бұрын
I am so excited to start this. I need to finish up another project I'm working on and then will get back to the series. Thank you for taking the time to create this tutorial.
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
You're very welcome, and thank you for your continued support 🙏
@wachaoochannel9912
@wachaoochannel9912 9 ай бұрын
I'm following this series about a week and it keep better and better! Hope you all the best and create more wonderful series like this.This help a new ue dev like me a lot.
@AliElZoheiry
@AliElZoheiry 9 ай бұрын
Thank you 🙏 I'm glad that you're finding it helpful, I hope you enjoy the rest of the series as well, there's definitely still more to come
@azwadhossain6557
@azwadhossain6557 10 ай бұрын
Really looking forward to the next episode. Great content as always.
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you Azwad, I hope you enjoy the next one as well 🙏
@roydash5657
@roydash5657 10 ай бұрын
This is just masterpiece! Fantastic. Why YT not recommend your channel? You really fantastic devoloper
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you for your kind words Roy, I'm really happy you liked it, and I do hope YT starts recommending my content more 😅
@roydash5657
@roydash5657 10 ай бұрын
@@AliElZoheiry I am too hopefully. I wish you GOOD LUCK!
@user-pn3ut7rw6c
@user-pn3ut7rw6c Ай бұрын
Your tutorials are really really good! For sure the best UE AI tutorials I have seen! Keep up the great work! Like.
@AliElZoheiry
@AliElZoheiry Ай бұрын
Thank you so much for your kind words! I'm really glad to hear that you're finding the tutorials helpful. Your support means a lot. Keep an eye out for more content coming your way!
@user-tk1vu2lx9v
@user-tk1vu2lx9v 10 ай бұрын
your content is amazing... you are amazing. thank you all for this. i've learned a lot.
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
You're very welcome. Really glad you're finding it useful and learning from it.
@occy999
@occy999 8 ай бұрын
So ive been incorporating this tutorial into my own game for a while, i did the damage tutorial before, spent ages working out how it would work for my context but then this video comes along and does pretty much what i did, but a bit better so good. I learnt alot from working it out before lol so not even mad haha
@AliElZoheiry
@AliElZoheiry 8 ай бұрын
That's an excellent way to learn actually. Try doing something yourself, take note of what mistakes you made and what you didn't understand, then watch someone else do it, and address the questions you had. That way, you'll remember these lessons for a lot longer. So great work 💪
@oumarba7442
@oumarba7442 10 ай бұрын
you gained a subscriber, it's really nice content and well explained
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you Oumarba, really happy you enjoyed it 🙏
@blueslothvfx7174
@blueslothvfx7174 6 ай бұрын
Just joined Patreon, I look forward to your future videos!
@AliElZoheiry
@AliElZoheiry 6 ай бұрын
Thank you so much, I really appreciate the support, I'm glad you like the content so far 🙏
@Shizuma450
@Shizuma450 10 ай бұрын
I love the way you explain honestly xD It's so methodical, clean and well explained! Understanding what you're doing is so much more relevant than just following a "tutorial" and I have to admit that's the case with your videos, it's really easy to understand, the rhythm is really good too, it's nice! Thank you for this video! It brings a lot of strength to our projects!
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you as always Shizuma for your kind words and support. It really motivates me to keep doing these tutorials when I see people commenting on the things that I do to set myself apart from others, as in focus on being an educator and not just a content creator, so I'm really happy that you notice it 🙏♥️
@kasperlarsson7598
@kasperlarsson7598 5 ай бұрын
Had a lot of complications with the Patreon files only being a collection of all lectures up to 19. Its tough but with a lot of focus its possible. Im at lecture 9 atm and its seriously a crazy in depth class. Highly recommended.
@AliElZoheiry
@AliElZoheiry 5 ай бұрын
Hey Kasper, sorry to hear you're facing issues. Unfortunately I don't keep a copy of every version, but I'm trying to help you on discord
@pleasantlygrim6712
@pleasantlygrim6712 3 ай бұрын
I cant believe this tutorial is free, great stuff
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Thank you for the kind words! I'm glad you found the tutorial helpful. Your support means a lot!
@davidlindvall9599
@davidlindvall9599 10 ай бұрын
Your tutorials are really really good! For sure the best UE AI tutorials I have seen! Keep up the great work! I have a wish though: could you make a tutorial on how you pass movement states from the behavior tree to an animation blueprint (so I can set locomotion depending on movement state) :) It's probably really easy, I just have not figured it out yet :)
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you David! Glad you're finding this useful. To access any information about your pawn from the anim BP, first the information has to be available to that pawn (as a variable, for example "MovementState") then you can have a function that modifies this movement state, and if you'd like to be able to call that function from the behavior tree, then you should create a behavior tree task that simply calls that function, then use that task wherever you like in your tree
@davidlindvall9599
@davidlindvall9599 10 ай бұрын
@@AliElZoheiry Thank you very much, I will try that!
@ThinDino
@ThinDino 3 ай бұрын
Love the series ♥ , just a handy tip the way you are setting the max and current health in the construction script, you can set it more easily, when you select the DamageSystem Component in the Details panel you get the Default section where you can override the values which will be local to character it is attached to
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey there! Thank you for your comment. I'm really glad you're enjoying the series! and indeed, overriding the default values is also possible in the details panel, but I've had some bad experiences with that, such as the values getting reset when the engine crashes or when I migrate files, so I decided to use the explicit and clear way to avoid any future hiccups
@waadi3ach569
@waadi3ach569 Ай бұрын
why even have a max health variable, i just used a map and just stuck values between 0 and 1 AI health doesnt have to be a complex system
@Atl3m
@Atl3m 10 ай бұрын
This is fun🎉 your doing a great job learning away your skills :) cant wait for the next part. Please add a loose interest feature also when you start those types of mechanics agien . Maybe a AI Villager behavior in passive, a AI that use EQS to scan for actors of class to collect like wood , The settlers style, go to actor of class collect and move back home .
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you! glad you're enjoying it ;) Great suggestions for upcoming parts, I'll definitely consider them, thank you.
@Atl3m
@Atl3m 10 ай бұрын
@@AliElZoheiry oh and cool to see a addon for the health threshold, like alot of RPG games spesially Final fantasy when you get to a critical health level they get harder and faster, you almost have that mechanic already just change the run away and heal to a secondary check if below ,3 and if below ,1 abort run away and switch to "blod lust" AKA the Boss mode
@alraffa5090
@alraffa5090 2 ай бұрын
Firstly, let me begin by saying what an awesome series. Your design and flow work very well. It was a bit complicated for me at first being that I am a beginner, but it all started to come together and makes sense to me! I just have one question regarding your design choice on the melee combat and Sphere Trace method you chose. Your sphere trace basically calculates a straight line from your body to a distance length from your body right in front of the player character. IF you have a sweeping swing with a weapon, you basically hit anything within that straight line. I have been using a Notify Trace which based on the weapon (skeleton mesh, not static mesh) so that the trace picks up all hit detection throughout the swing. I would really prefer to use this method over yours but I am afraid to "break" all the fantastic work that you did ! I guess Ill give it a try tonight. First step is to convert the weapons into a Skeletal mesh, plug in a start and end socket on each weapon, then change the coding based on the start and end sockets of the skeletal mesh instead. Would you say this is the right approach to revamping your melee sphere trace ? Thank you !!!!
@AliElZoheiry
@AliElZoheiry 2 ай бұрын
Hey there! Thank you for the kind words and for sharing your approach. The sphere trace method I'm using is indeed very basic and not meant to be used in an actual project, this is because I didn't want to go too deep into combat mechanics and stick to AI functionality. Though the best way to do a sword trace is to have a line trace fire multiple times from the start to the end of the sword while a swing is occurring, and detect everything that trace collides with. There are a ton of tutorials on that on KZbin, and it can be integrated easily into this system without breaking.
@dawidchoptowy8161
@dawidchoptowy8161 10 ай бұрын
@AliElZoheiry great to see you again. You know what would be great? If you create AI serie about multiple AI formation. Player could decide which formation his AI dudes shoud create, that would be awesome !
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Hey Dawid, that's a cool idea. Though I'm focusing now on the behavior of an AI independent of the group, which is a prerequisite for having group behavior of course, so the series might grow in that direction, but I haven't planned that far ahead yet
@noahM3D
@noahM3D 9 ай бұрын
Amazing tutorial so far! Do you know how to go about making the attack cooldown decorator random in a range of seconds rather than a specified amount of seconds?
@AliElZoheiry
@AliElZoheiry 9 ай бұрын
Thank you 🙏 For that you'll have to make a custom decorator, because the built-in decorator only supports static values
@linuxtyler1389
@linuxtyler1389 10 ай бұрын
it's getting really cool, I think you could make the shooter smarter, as his attack is not melee he doesn't need to move only around the enemy, he can have a much larger space to move, like the bots in csgo. thank you bro.
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you Tyler, I'm having this debate in my head right now, whether to keep making these 2 enemies smarter or whether I should add more enemy types, each approach has its pros and cons, what do you think?
@linuxtyler1389
@linuxtyler1389 10 ай бұрын
@@AliElZoheiry it's interesting, well, it depends on the new types, if they are very specific and you can't implement the 2 already created, then it's worth creating yes. Like instead of creating one that uses power to defend and attack, you could implement this to the sword warrior, when his enemy is further away he could use the power to his benefit, this will make it difficult for the shooter. With this implementation to the sword warrior, it is already possible to make a mage from scratch. Now on the intelligence part, it would be very interesting. A smarter ai would easily win over 2 that aren't. You could give them more intelligence and implement more attack and defense without having to create others. I don't know how long this series of yours will be, whatever you choose to do I'll be grateful.
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
@@linuxtyler1389 awesome! Thanks for the input, let's see what I come up with 😅
@ps5games821
@ps5games821 10 ай бұрын
Great tutorials Make more tutorials please
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you! I definitely will create more 🙏
@lilingliu9797
@lilingliu9797 9 ай бұрын
Great tutorial and learn a lot from this series. 👍👍 Is it also possible to tutorial an interaction object with an enemy ai? Like the enemy go to the health area and recover health or touch something and get hurt? Thanks in advance.
@waadi3ach569
@waadi3ach569 Ай бұрын
for anyone in the future reading this unreal engine yt channel does this where an enemy runs to eat food, its not really a tutorial but you can pause and repeat what they did
@lolaswift111
@lolaswift111 10 ай бұрын
Zeer bedankt Ali
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Graag gedaan ;)
@Atl3m
@Atl3m 10 ай бұрын
Melee needs a check on in valid attack range , if we make a combo attack in melee it keeps attacking, its in sight so thats working but in range is another case . ;) and the sense checker (is attackable ) you might want to move into the Can Sense function or have two checkers. one can sense and a is attacable .
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Yeah I'm debating now whether to keep improving the current enemies (make them smarter) or add new types of enemies 🤔
@Atl3m
@Atl3m 10 ай бұрын
@@AliElZoheiry I guess the smarter AI and more features will create the classes. You only need the base ai types , range, melee and passive and you have coverd them all it's the behavior features you can flipp that personalize em.
@minidinogamer
@minidinogamer 18 күн бұрын
Hey Ali! First of, I just want to say I really respect how you take the time to reply to everyone's comments, even the new ones. This is a really big and impressive tutorial, so you going the extra mile is really cool. In that being said.. I have a huge problem, simple, but I can't seem to find a way to fix it. The AI isn't playing a hit animation when they get hit. From 48:00 - 54:00, my blueprints are the exact same, so i'm really stumped. I was hoping you would help me, or push me in the right direction to fixing it myself before I replay this tutorial. Another issue I could try fix myself first is that my ranged enemy isn't doing damage to me, but does do damage to the melee enemy. Thank you :)
@AliElZoheiry
@AliElZoheiry 18 күн бұрын
Hey there! Thank you for your kind words and for watching. I'm glad you noticed the effort I put into answering each comment. It takes a lot of time for sure, but it's worth it for me ;) If you're enemy isn't playing montages, then make sure you have a "default slot" node in your anim graph (in your animation blueprint), but if the issue is with this specific hit montage, then check the montage itself and make sure the slot is set correctly. Otherwise, I suggest debugging the issue further to narrow down the problem area.
@minidinogamer
@minidinogamer 17 күн бұрын
@@AliElZoheiry When you talk about the slot for the montage, do you mean the slot for the hit reaction target? If so, that's set up correctly. I'll check out your debug video :)
@AliElZoheiry
@AliElZoheiry 17 күн бұрын
I meant on the montage itself, you can set which slot ahould that montage be applied to. I also cover that example in the debugging video @minidinogamer
@minidinogamer
@minidinogamer 14 күн бұрын
@@AliElZoheiry Turns out the problem was I didnt set the "Is interruptable" variable to true... Thank you for making a discord server, everyone is extremely helpful, and your debugging video will definitely come in handy
@sirbottlekick1690
@sirbottlekick1690 Ай бұрын
Always so Thankful for the amazing contents! You are the GOAT on unreal battle tutorial. I have a question, when putting two enemies to fight, it seems that one who've first seen will activate eqs movement, and the one get trapped in a loop of 'focus target / set movement / eqs query(that has BTD including Context_AttackTarget)' And even if Melee guy is facing back and placed far away, when the Range one sees him, the Melee guy 'wields weapon' even tho he couldn't have seen the Range guy. I am assuming this happens because changing their state to attack is somehow linked? and first one gets attack target and other one don't, causing BTD to get no valid attack target. if you would, Could you please give me any tips or thoughts on this?
@AliElZoheiry
@AliElZoheiry Ай бұрын
Hey there, not sure how that is happening, because the 2 enemy states are not linked in anyway, they both have a separate instance of the AI controller and the behavior tree, and even run separate instances for the EQS, so they know nothing about each other. There must be something else going on here
@art0ni641
@art0ni641 17 күн бұрын
Hey Ali awesome tutorial quicl question what if i had a damage system before but want to use yours do i need to delete all the previous code?
@AliElZoheiry
@AliElZoheiry 15 күн бұрын
Depends on how your damage system was implemented, if it was also a separate actor component, then you can just replace the old one with the new one and that's it, but if you had the damage functionality implemented on the character itself, then you'd have to delete all the functions and variables related to the old damage system as not to interfere with the new one
@art0ni641
@art0ni641 15 күн бұрын
@@AliElZoheiry ok understood I'll do that
@magnaomega
@magnaomega Ай бұрын
Thank you so much for all these videos, you explain so well something that is very complicated. Also I wanted to ask you something, I have a problem with the transition of states, I have the frozen state, then I have an animation montage and when it finishes I change to the attack state, the problem is when it changes to the attack state the animations don't play, the enemy moves, I mean search the player and all, but the animations of walk or idle stop playing and just reset when the character attacks me again and this happens all the time, any idea what is happening? And again thank you so much for all your time to share all these info.!
@AliElZoheiry
@AliElZoheiry Ай бұрын
Hey there! Thank you for your kind words and I'm glad you're finding the videos helpful. Regarding your question, I have no idea what's going on to be honest. I suggest checking your animation blueprint for any strange transitions and then add print statements and breakpoints to debug the issue
@beppolaut605
@beppolaut605 5 ай бұрын
If the enemy's don't make Damage at 31:30 please go to their separate take Damage Function and click "call to parent" Function on the Take Damage note like 23:20. Because if you have opened it before the funktion create a separate funktion in this child class( BP_Enemy_Melee, BP_Enemy Ranged).
@AliElZoheiry
@AliElZoheiry 5 ай бұрын
If you accidentally overwritten a parent function in a child, I suggest just deleting it from the child class, that way it automatically uses the parent one without need for a call to parent function from the child
@waz67
@waz67 4 ай бұрын
This tripped me up for a bit, I happened to double-click on the Take Damage interface in BP_Enemy_Melee without realizing it was automatically creating a new Take Damage function overriding the BP_Enemy_Base version, and suddenly my Melee enemy was no longer taking damage.
@ollystow4918
@ollystow4918 13 күн бұрын
Hey man great vid, just wondering where the is dead function came from as I followed the Damage System video and I couldn't find it there, is there some IsDead function I need to remove as I am getting a "Name Already exists" error and can't implement into the character or enemy
@AliElZoheiry
@AliElZoheiry 11 күн бұрын
Hey there, thanks for the comment! The "IsDead" function just returns the "IsDead" variable from the BPC_DamageSystem. Not sure when I added it, but it doesn't do anything other than that :D
@snehasissarkar3794
@snehasissarkar3794 Ай бұрын
Sorry I may have missed it but I did not find the IsDead? function in your "How to Build a Combat Damage System | Unreal Engine 5 Tutorial | Reusable and Flexible Design" video. If you you don't mind can you tell me where is it . I really want to learn and follow it step by step . love your contents .Keep it up .
@AliElZoheiry
@AliElZoheiry Ай бұрын
The "IsDead" is a variable on the BPC_DamageSystem that is set when the character dies. That also triggers an event OnDeath
@snehasissarkar3794
@snehasissarkar3794 Ай бұрын
@@AliElZoheiry yes I got that but I am asking about the IsDead function on the 'BPI_damagable' I did not find that how you created in your video. Or you can please tell me what you did in that function.
@AliElZoheiry
@AliElZoheiry Ай бұрын
Ohh that function just reruns the value of that variable, doesn't do anything else
@snehasissarkar3794
@snehasissarkar3794 Ай бұрын
@@AliElZoheiry ok thank you now I can complete it . Great work pls teach us the best you can Master 🙂😀😍😁
@philosophic5591
@philosophic5591 8 ай бұрын
Hey Ali! I love the videos as they have been very helpful. Just a quick question about the damage system though; I have gotten to the point of needing to change max health values of different enemy types, but for some reason when I go to implement the GetMaxHealth function into my children enemy types the actual value does not seem to change and just seems to be static. How would I go about creating different health values for the different enemies and the player using this system?
@AliElZoheiry
@AliElZoheiry 8 ай бұрын
Hey! Glad you’re enjoying it. To your question, the GetMaxHealth function just returns whatever the maxHealth value is of that variable in the BPC_DamageSystem, so what you need to do (either in the constructor, or on beginPlay of your enemy) is to pull off of BPC_DamageSystem, and set the variable MaxHealth and Health to the values that you want
@philosophic5591
@philosophic5591 8 ай бұрын
@@AliElZoheiry Awesome, that fixed it right away. Thank you very much!
@oerealrap
@oerealrap Күн бұрын
after completing the damage system tutorial i noticed that there is no isdead function in the tutorial is that in a seperate tutroial or the projectiles tutorial maybe
@jamaalsineke2405
@jamaalsineke2405 9 ай бұрын
Preciate this knowledge....could you please do tutorials on blueprinting status effects like Fear,Sleep,Charmed or Silenced? like in RPGs...every YT tutorial just does fire and ice which is so limiting in terms of what IabilitiesI can create in
@AliElZoheiry
@AliElZoheiry 9 ай бұрын
Hey Jamaal, I'll definitely consider it, but it would be a deviation from the current AI series, so once I'm done with this one, I'll definitely consider status effects. But just to give you a hint, the same way you do ice and fire, you can do the other effects you want as well, it follows the same structure
@jamaalsineke2405
@jamaalsineke2405 9 ай бұрын
@@AliElZoheiry Thank you.....I was close to giving up but this gave me hope.I'll keep studying from you and others and hopefully it works out
@ChitSit
@ChitSit 15 күн бұрын
Hi Ali! I want to express my gratitude for the wonderful lessons. I have a question. Why is the melee and stop animation triggered only after 1 sword strike? And in ranged combat, animation and freezing are generally absent
@AliElZoheiry
@AliElZoheiry 11 күн бұрын
Hey there! Thank you for your kind words and I'm glad you're finding the lessons helpful. I'm not really sure what you mean. If you're asking why I am using a single sword swing and not a combo, the reason is because I was not aiming to build a combat system, but just showcase how combat would work in an AI system, and that can be done with a simple sword swing. Regarding the ranged enemy, I am also not sure what you mean by animation and freezing are absent. There are animations for shooting the gun and hit reactions also
@ChitSit
@ChitSit Күн бұрын
@@AliElZoheiry okay
@gaminguniverse1114
@gaminguniverse1114 10 ай бұрын
Nice video
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Thank you !
@electronicinfection
@electronicinfection 13 күн бұрын
Thanks thanks thanks!
@AliElZoheiry
@AliElZoheiry 11 күн бұрын
Glad you found the content helpful! Thank you for watching and commenting 🙏
@halfman4833
@halfman4833 3 ай бұрын
Is there a way to change the skeletal mesh of the hit reaction montage in the child class like the animation montage itself? I have alot of custom characters that uses their own skeleton and retargeting to the UE5 would take a long time
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey, yeah of course, you can use any mesh by simply changing it in the enemy pawn and assigning a new anim BP for your mesh
@kojustyle4167
@kojustyle4167 3 ай бұрын
Really love this series so far. It is one of the best on youtube. A weird thing is when I spawn in the same enemy twice only one of them will be active. The other one will only chase the player, If I either hit it or the first enemy died. Any Idea why ? I set the aggro range with a hitbox and it gets triggered on overlap begin:
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey Koju, really glad you're enjoying this, and thank you for watching and commenting. Regarding your issue, I don't know what the problem is, but I suggest checking where the behavior tree is stuck and add some print statements and breakpoints to see where the flow of execution stops
@kojustyle4167
@kojustyle4167 3 ай бұрын
@@AliElZoheiry I figured that the problem is not that the tree isnt running, but the enemy does not recognize the player. Only one of them identifys the player and chases them. But if I hit the other enemy then they also chase me. But then they only chase me If I am in the aggro range of the other enemy. It seems like the tree only uses one aggression hitbox at once.
@SvampMamma
@SvampMamma 3 ай бұрын
I love this series, but damn i really wished you'd show how to impliment tracing the sword in this tutorial. I've been looking for a way to make it work with your system for ages. Maybe I have to back to the begining to set it up?
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey there, glad you're enjoying the series 🙏 I just implemented a very basic sphere trace when the enemy attacks with the sword. I didn't go into advanced tracing methods that do a continuous trace along the sword's path (which would be the proper way of doing it) because then that's more related to combat mechanics and now AI mechanics. I'm planning a combat series in the future though
@TROYSOLLY
@TROYSOLLY 3 ай бұрын
God Bless!
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Thank you so much Troy 🙏☺️ I really appreciate this, it helps me a lot in keeping this channel going and keeping me motivated. So thank you again for that ❤️
@amogh-garg
@amogh-garg 3 ай бұрын
Hey, love the series! I just had a question since whenever my enemies died, they stilled played the idle animation. I also think it might be important that the enemies I used were made by me and not a professional, so I don't know if I messed something up. Last question, whenever one enemy attacks another enemy from behind, for some reason it doesn't aggro, even though I checked if attacktarget is valid in the blueprint. Thanks for your great tutorials, though!
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey, glad you're enjoying the series. Regarding the enemy animation, it sounds like you didn't ragdoll the enemy, that's why they are still playing an animation, in this series I ragdoll the enemies on death and thus stopping any playing animation in favor of simulating physics on the asset. Note that ragdoll won't work though if your skeletal mesh doesn't have a "physics asset". Regarding your second question, there is a bug that I fixed in part 8.5 of this series, that causes enemies not to attack the player if the player attacks them from behind, so check that out, it might fix your issue
@bwomped4010
@bwomped4010 3 ай бұрын
@@AliElZoheiry Thank you so, so mcuh!!
@user-xv6hh8iw8m
@user-xv6hh8iw8m 8 ай бұрын
Great tutorials. I have a few small issues. when the Ai goes into Attacking , they can't damage each other. They only damage player. I can use AOE to damage one of them, but the other one can't damage them either. Thank you Ali .
@AliElZoheiry
@AliElZoheiry 8 ай бұрын
Hey, feel free to join the Discord server and post your question in the KZbin help channel, either I or someone else can help you if you provide detailed information with screenshots of what's happening (discord link in the description)
@vidmaster7
@vidmaster7 10 ай бұрын
Hi, Ali. I started the tutorial but didn't get very far. I added BPC_DamageSystem to the BP_Enemy_Base. I've done everything up to 7:18. It shows everything except IsDead. Yet, that exists as a Boolean variable in BPC_DamageSystem. The other odd thing is that both "GetMaxHealth" and "GetCurrentHealth" show up under Default instead of under Heal. I followed your other tutorial carefully, but I may have missed something. Thanks.
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
IsDead should also be a function in the BPI_Damagable interface, not just a variable in BPC_DamageSystem. Also, not sure what you mean by "Show up under Default/Heal", show up where and in what context?
@vidmaster7
@vidmaster7 10 ай бұрын
@@AliElZoheiry I can check tonight, but I followed the other tutorial carefully. Perhaps, I missed something. Regarding the location of the two Health interfaces, in your video they show up under all the others like Heal. Mine shows up above them under Default.
@vidmaster7
@vidmaster7 10 ай бұрын
@@AliElZoheiry For whatever reasons, the IsDead function did not exist in my BPI_Damageable. I added it with the Output of Dead (Boolean) and will continue from there. Thanks.
@MalcolmIreland
@MalcolmIreland 7 ай бұрын
@@AliElZoheiry I also had this issue. I think in your other video you don't add IsDead in the BPI_Damageable.
@joric
@joric 8 ай бұрын
What's the best way to get a vector of impact in OnDamageResponse (e.g. from a random projectile or from explosion)?
@joric
@joric 8 ай бұрын
Got it, Part 8.5 introduces "DamageCauser" in S_DamageInfo, but really enemy shouldn't know anything about damage causer, only guess, IMO.
@AliElZoheiry
@AliElZoheiry 8 ай бұрын
Hey Joric, you can definitely follow the same approach and add the vector in the damageInfo which will be used on damage response (as you mentioned it was added in 8.5) or you can make it a separate parameter unrelated to damageReponse. But logically speaking, both the impact vector and the damage causer can belong to the DamageInfo struct because they are all related. You can take the e HitResult struct that is built in unreal engine (the output of a trace) and you'll see that it includes everything possible about the trace result
@god_ozai828
@god_ozai828 Ай бұрын
dude I love these tutorials, but sometimes I miss something but its usually ok... this time I didn't realize you set the default value of Is interuptable to true so i spent a solid hour wondering what was wrong with it lol
@AliElZoheiry
@AliElZoheiry Ай бұрын
Hey, glad you're enjoying the tutorials! Don't worry, we've all been there with overlooking settings. It's all part of the learning process. Keep up the great work!
@ThePieman150
@ThePieman150 Күн бұрын
why does he keep saying "this was explained in the damage system tutorial" when this IS the damage system tutorial? anyone know what he's referring to? trying to get caught up
@shantagmorelbereth1408
@shantagmorelbereth1408 3 ай бұрын
Hello, after adding the Service "StopAttackingIfDead", when running the editor, my project keeps on crashing. Everything was fine until the Service implementation. If i am removing it, no more crash but the ranged Ennemy keeps on firing... any idea?
@shantagmorelbereth1408
@shantagmorelbereth1408 3 ай бұрын
I found it right after posting: Patrol or passive state in BT_Enemy_Ranged was not set on "BT_Subtree_Passive" (It was on "BT_Enemy_Ranged" causing the project to crash)
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey there, glad you found the issue. Crashes can be very annoying when you don't know the cause.
@Aestareth_
@Aestareth_ 2 ай бұрын
Instead of ticking to check for the player death, wouldn't it be better to bind an event to an event dispatcher in the AIController, then in your player BP, loop over all AIControllers using get all actors of class then calling the event for each controller ?
@AliElZoheiry
@AliElZoheiry 2 ай бұрын
Hey, that's a great suggestion! Using event dispatchers and binding events would provide a more efficient way to handle player death detection in the AIController. But I just wanted to explain services, that's why I did it this way
@sxcylla4438
@sxcylla4438 4 ай бұрын
If we hit the target at the beginning that is when there is no use last seen attack target and if the player is not inside the sight range then the player is supposed to get into combat mode and chase the player but he fails to do so and gets into passive state as validation fails in that case. Hence damage sense makes no logic now. So how can we use this use last seen attack target bool properly
@AliElZoheiry
@AliElZoheiry 4 ай бұрын
That is fixed in tutorial 8.5, check it out and let me know if it solves your issue
@caution5862
@caution5862 7 ай бұрын
Hey there, I am working on a shooter game as well and currently focusing on my enemy AI I want my enemy to take cover but have a custom query for it bcoz the default ones create too many points which is actually too heavy on the system not at all optimal can you maybe make a small video on how to make a custom query generator. that generate more accurate 'take cover' points
@AliElZoheiry
@AliElZoheiry 7 ай бұрын
For the EQS you can customize the number of points from the details panel to be as little or as much as you want, but if AI can only take cover behind specific actors, then you can have an EQS query that searches for those actors only instead of generating a grid of points, but if you want your AI to be able to take cover anywhere where they are hidden, then you need to generate points
@caution5862
@caution5862 7 ай бұрын
One more thing, which is not included in any of your videos yet, but I am facing a problem in my Enemy AI is that my Enemy is at all times 100% accurate but I want him to miss shots and basically nerf him. I Use Set focus to our target (Main character) blackboard key in behaviour tree @@AliElZoheiry
@AliElZoheiry
@AliElZoheiry 7 ай бұрын
@@caution5862 What a lot of games do is give the enemy a chance to shoot the player, for example, generate a random number between 0 & 1, and if that number is > 0.5 then shoot the player, otherwise just pretend to shoot. That way the enemy has a 50% accuracy. In Doom, for example, to encourage the player to keep moving, the enemies accuracy increases when the player is standing still, and the decreases the faster the player moves, to act as if the player is now harder to hit
@caution5862
@caution5862 7 ай бұрын
@@AliElZoheiry how can I impliment this in my behaviour tree?
@AliElZoheiry
@AliElZoheiry 7 ай бұрын
@@caution5862 I'd suggest putting it in your attack function itself, not the behavior tree, similar to how I implemented the "TryBlock" in this tutorial kzbin.info/www/bejne/i3qkkq2FnNyqlassi=3xBG_NQ0EaV-3QZ8&t=207
@sunsh1neee
@sunsh1neee 3 ай бұрын
I have a problem, I do not know how to update the status of the progress bar. I made a system that after the 'heal' and 'take damage' events, I have my own event triggered that sets the percent of the progress bar, but it does not work quite correctly, it would be very nice to learn the solution (translated with the help of a translator, sry). And Ali, if u read this, thank you so much, your tutorials is very helpful, keep doing it, you're good at it.
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey there, glad you're finding this tutorials helpful. I just released a new video describing the "Observer pattern" which is a solution you can use to update the health bar, same way I update the widget in this video here kzbin.info/www/bejne/j3fXfZdjl7CfY7c
@sunsh1neee
@sunsh1neee 3 ай бұрын
@@AliElZoheiry I noticed your answer late, but it is still relevant, so thank you very much, I hope someday, thanks to your tutorials, I will be able to support you financially
@gaminguniverse1114
@gaminguniverse1114 10 ай бұрын
Could you make a video for like an animal familiar Ai Or a fast paced enemy AI
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
The concepts and tools that I teach in this series can be applied to any type of AI, whether that's fast paced, humanoid or familiar. Though as the series advances I will be showing how to create different enemy types, so I might consider this, but to be perfectly honest, it's not currently on my radar
@zrmdevelopment7260
@zrmdevelopment7260 7 ай бұрын
hi, 47:55 the enemy still attacks me. When you've implemented On Death (BPC_DamageSystem) into BP_Player, I still had the death function that you've made in the damage system standalone tutorial. Custom Event Death, Mesh -> Set Simulate Physics etc. I don't know where the issue could be. I've tried to delete the "Death" Custom event from the damage system tutorial but if I do that, then I get an error after compile: "Create Event Signature Error: Unable to find the selected function/event: "Death" - has it been deleted?". When I go onto the error, it brings me to the Construction Script from BP_Player where Bind Event to On Death is, which has an "Create Event" and from the dropdown arrow it has "Error? Death" which I've just deleted from BP_Player. If I try to select the new Death event which is pretty long I cannot compile, it brings me to another error: "Create Event Signature Error: The selected function/event is not bindable - is the function/event deprecated, pure or latent?. The idea behind of all this is that I didn't migrate the damage system from that tutorial, I wanted to do all by myself cause I wanted to learn. But now I am really stuck here, can you please help me? Also let me know if you need me to clarify cause I can be a lot more specific about the problem but I didn't want to write an essay at first. Thank you.
@AliElZoheiry
@AliElZoheiry 7 ай бұрын
Hey! Sorry to hear your facing issues, but I'm glad you're trying to rebuild things on your own and learn. It's hard for me to understand what you're explaining without seeing your blueprints. I recommend joining the Discord server and posting your question in one of the help channels, with some screenshots or videos, then I or anyone else can help you better that way
@zrmdevelopment7260
@zrmdevelopment7260 7 ай бұрын
I've managed to fix it eventually. Thank you anyway. Keep it up!!@@AliElZoheiry
@josecervilla5362
@josecervilla5362 Ай бұрын
i know what happens to you, the problem is inside to the service for stop the attack inside to enemy ranged, you pick a wrong BPI, maybe you choice BPI enemy AI and the correct is bpi damagable, fix it, and you will see that works.
@Im_pro_true16
@Im_pro_true16 5 ай бұрын
I just realised the health bar of the enemy can be seen anywhere, even if you went far, how to make the enemy health bar not visible until the ai sees the player or the player reaches a certain radius of the enemy, thank you
@AliElZoheiry
@AliElZoheiry 5 ай бұрын
Hey, you can set the defaultVisibility of the healthbar to "hidden" until the state is set to attacking, then switch it to "visible" and back to "hidden" anytime the state changes from attacking to something else
@Im_pro_true16
@Im_pro_true16 5 ай бұрын
@@AliElZoheiry thank you
@Dord1999
@Dord1999 10 күн бұрын
Literally every time I disable legIK in the montages unreal crashes, any idea why?
@AliElZoheiry
@AliElZoheiry 10 күн бұрын
Hey there, I personally never encountered such an issue. Check what the error message is when it crashes and see if it points to a specific file or area in your game
@osmanbaba1485
@osmanbaba1485 2 ай бұрын
Hey Guys, I'm severely stuck I got to 19:34 and when my enemy retreats to heal it doesn't heal, I hooked up some print strings to the new health output and it comes out 0. Does anyone have any suggestions?
@osmanbaba1485
@osmanbaba1485 2 ай бұрын
Update: I just recreated the function from scratch and it worked possibly & engine bug
@AliElZoheiry
@AliElZoheiry 2 ай бұрын
Glad it's working now. There are definitely some engine bugs that would cause that 😅
@vilsaum3dzeiro
@vilsaum3dzeiro 2 ай бұрын
Same here, but in my case I realized that on the BPC_DamageSystem the Heal function was clamped with the Current Health instead Max Health, so it was taking a value lower than the HealthThreshold, so it kept healing. hope it helps.
@art0ni641
@art0ni641 17 күн бұрын
Mine had this problem but was attacking now it attacks and doesn't even take damage
@isoverdg
@isoverdg 2 ай бұрын
I like very much your tutorials bro, but i need to say something: The melee enemy never had the upper hand against the ranged 😂
@AliElZoheiry
@AliElZoheiry 2 ай бұрын
Haha, I'm glad you enjoy the tutorials! You're absolutely right, the ranged enemy always seems to have the upper hand in those scenarios 😄
@DragonFang253D
@DragonFang253D 3 ай бұрын
The damageable actor returns null when playing as a client and the cast to AIC enemy base fails.
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
Hey there! It seems like the issue might be related to replication for the damageable actor and AIC enemy base. Check the replication settings for both to ensure they are properly replicated to clients. I intended this series for single player only, so unfortunately I can't support with making it multiplayer
@DragonFang253D
@DragonFang253D 3 ай бұрын
@@AliElZoheiry Well thank you for the reply, thats understandable that it is easier to make for single player
@tepechef1932
@tepechef1932 Ай бұрын
"oh is a nasty way to die....Allrigth lets get started" xD ahahahhahahahha
@AliElZoheiry
@AliElZoheiry Ай бұрын
Hahahaha, definitely an unfortunate way to go! But now, let's dive into the subject. 😂
@A.D.A.M.411
@A.D.A.M.411 8 ай бұрын
Hey Thanks again for all your help for real!! I just joined the discord but i never am on there really and so im gonna ask here first... On both the damage tutorial and this video i'm running into the same issue and can't figure out how to get it to work right... Ok so when dealing with the W_HealthBar and under the Get Percent function there is the variable named (Damageable Actor) that connects to the Max health and Current Health. The game compiles just fine but when i play i get this error.... Blueprint Runtime Error: "Accessed None trying to read property DamagableActor". Node: Get Max Health Graph: GetPercent Function: Get Percent Blueprint: W_HealthBar. So i plugged in a new variable that is an Actor that references BP_Enemy_Base and it doesnt give an error but i know this isn't right and will cause issues later... Please help me figure this out if you get a chance.. Thanks again and until next time! :)
@A.D.A.M.411
@A.D.A.M.411 8 ай бұрын
@AliEIZoheiry great now the BP_Enemy_Base variable for the Get Percent Function is causing the same error but when i had just done the damageable tutorial it worked... so something in the merging of the two has caused it to be worse... also im noticing as of now my ranged attacker is just running around staying behind cover trying to heal all the time and stay hidden from me as well without ever attacking... but like i said it was working up until the merge... please help if you get a minute.. I'll also post this real quick to the discord...
@AliElZoheiry
@AliElZoheiry 8 ай бұрын
Hey Adam, I see you're being helped on discord as well, but just to offer my insight. You can simply to an IsValid check before accessing the Damageable actor, and only call the health functions of the Damageable actor is valid.
@krumss
@krumss Ай бұрын
Can you show us how to use GAS instead of building this?
@AliElZoheiry
@AliElZoheiry Ай бұрын
Hey there! Thanks for your suggestion. I will definitely consider creating a tutorial on using GAS. A lot of people have requested it, so it's definitely on my list
@shikeioff
@shikeioff 4 ай бұрын
I do not have the brain component, can someone explain me why ?
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
The "Brain component" is a component on the AI controller, so make sure you're getting a reference to your AIC_EnemyBase and getting the brain component from that
@user-ql5pk2ci2u
@user-ql5pk2ci2u 10 ай бұрын
finally!
@AliElZoheiry
@AliElZoheiry 10 ай бұрын
Hope it was worth the wait ;)
@adarshgupta380
@adarshgupta380 26 күн бұрын
When i try to stop the logic of my ai it doesn't work, what could be the reason for this ? Btw I love your work man!!!!!😁
@AliElZoheiry
@AliElZoheiry 23 күн бұрын
Hey there! Not sure what doesn't work exactly when you stop the logic. If you call stop on the brain component, then the behavior tree should just stop executing, everything else will continue to work
@adarshgupta7359
@adarshgupta7359 23 күн бұрын
​​​@@AliElZoheiry 🤝❤️
@user-xb1jc7lf8x
@user-xb1jc7lf8x 10 ай бұрын
@Boppersgames
@Boppersgames 4 ай бұрын
0:42, my death is your reward. Have me as you will!
@AliElZoheiry
@AliElZoheiry 4 ай бұрын
Hahahaha, it was quite an unfortunate death indeed
@brianworden7022
@brianworden7022 4 ай бұрын
My enemy doesn't revert from FROZEN.. I followed the alteration to the Set States as Attacking and checked the box but still stuck doing nothing. NEVERMIND: Forgot to connect the mesh to the montage so it would just freeze the enemy and not return to attacking because the Animation never was able to Succeed or be Interrupted.
@AliElZoheiry
@AliElZoheiry 4 ай бұрын
Nice! Glad you fixed it
@SlombyChannel
@SlombyChannel 4 ай бұрын
My entire system broke when i rtied this and i dont know how to fix. I can nor redo and i im not redoing this whole tutorial from start and im not becoming ur patreon but i eed to project files it just broke
@AliElZoheiry
@AliElZoheiry 4 ай бұрын
Hey, sorry to hear that. Unfortunately the project files are exclusive for Patreon members, it wouldn't be fair to them if I give it to you for free
@SlombyChannel
@SlombyChannel 4 ай бұрын
ok@@AliElZoheiry i have gotten over it
@ahmetozan4754
@ahmetozan4754 6 ай бұрын
ayıp ettin aliiiii
@AliElZoheiry
@AliElZoheiry 6 ай бұрын
Sorry what xD?
@eugenemcmillan8047
@eugenemcmillan8047 8 ай бұрын
😒 P r o m o s m
@AliElZoheiry
@AliElZoheiry 8 ай бұрын
Are you seeing too many ads?
@filthfuckery6651
@filthfuckery6651 3 ай бұрын
When you've got IsDead function in damage system?
@AliElZoheiry
@AliElZoheiry 3 ай бұрын
IsDead was always part of the DamageSystem actor component, I implemented it in the "Combat Damage System" tutorial
@SilverWolf-VR
@SilverWolf-VR 21 күн бұрын
@@AliElZoheiry I don't have an IsDead Function in BPI_Damagable like you do at 5:13, I have just redone the Combat Damage System tutorial twice and I cannot see where you implemented this, in my BPC_DamageSystem I have a completely blank OnDeath Event Dispatcher along with IsDead Boolean Variable. In the BPI_Damagable there are only 4 Functions (GetCurrentHealth, GetMaxHealth, Heal and TakeDamage) The episode ended Using Custom Events Called in both the BP_Player and BP_Enemy and not using the Interface, unless I have missed something? any help would be much appreciated
@AliElZoheiry
@AliElZoheiry 21 күн бұрын
Hey ​@@SilverWolf-VR isDead function in the interface just returns the isDead variable from the damage system. If you dont have it, its very easy to implement
@SilverWolf-VR
@SilverWolf-VR 21 күн бұрын
@@AliElZoheiry Thank you so much I have it all sorted now! :)
@art0ni641
@art0ni641 17 күн бұрын
​@@AliElZoheirybro thanks I figured this out but my problem is that the enemy doesn't take any damage also if I put it in a map with the mass ai spawner sometimes the don't follow or chase
Eccentric clown jack #short #angel #clown
00:33
Super Beauty team
Рет қаралды 13 МЛН
КАХА и Джин 2
00:36
К-Media
Рет қаралды 3,8 МЛН
CAN YOU HELP ME? (ROAD TO 100 MLN!) #shorts
00:26
PANDA BOI
Рет қаралды 35 МЛН
Chips evolution !! 😔😔
00:23
Tibo InShape
Рет қаралды 40 МЛН
Tic Toxic Studios - AI Controlled NPCs in Unreal Engine 5 - Part 1.
13:08
Why Dependencies are Bad and How To Avoid Them In Unreal Engine | UE5
26:40
I Made a Game With Only FREE Assets In Unreal Engine 5
11:45
Smart Poly
Рет қаралды 463 М.
20 Unreal Engine Tips You NEED to know | UE5
8:38
Ali Elzoheiry
Рет қаралды 16 М.
How to Shoot a Projectile in Unreal Engine 5
7:54
Gorka Games
Рет қаралды 73 М.
The Most Common Mistake Beginners Make in Unreal Engine | UE5
12:17
Ali Elzoheiry
Рет қаралды 85 М.
Насколько ГЛУБОК океан? 😯 #Shorts
0:26
ФАКТОГРАФ
Рет қаралды 6 МЛН
Escape Nextbots Rosalia And Obunga Police #gmod
0:36
BizarroTube GMod
Рет қаралды 10 МЛН
Dynamike 1v3 Challenge 💣
0:38
Toodyxz
Рет қаралды 5 МЛН
СОБИРАЕМ РАДУЖНУЮ ИГРУШКУ #shorts
0:41
Ал Плей
Рет қаралды 2,8 МЛН
Bling Bang Bang Born fight: Aaron Vs Zane #minecraftshorts
0:13
BigBlockCraft
Рет қаралды 11 МЛН