LlamAcademy (Llama-Academy word chain 😉) is dedicated to helping you, yes YOU! Make your game development dream become a reality by creating helpful, beginner friendly and in-depth tutorials on a wide range of topics in Unity.
On this channel you can find Unity tutorials with a range in complexity from absolute beginner to quite advanced topics. I strive to make the advanced topics accessible to all.
👨💻 All tutorials are released with full source code on GitHub (when possible): github.com/llamacademy! No paywall here🚫!
I cover topics such as AI and Navigation, Performance Optimizations, Visual Effects (VFX), Bullet Physics & Projectiles, and many more!
❤ Believe in LlamAcademy's mission and have received value from the videos? Become a Supporter:
⚫ Patreon: www.patreon.com/llamacademy
⚫ KZread Member: kzread.info/dron/nWm6pMD38R1E2vCAByGb6w.htmljoin or click the Join button on any video
⚫ GitHub Sponsor: github.com/sponsors/llamacademy
Пікірлер
Does this keep in mind terrain weight?
Hello again. I got an another error about spawning enemies on new tiles. The IF branch immediately before this prevents processing if there is the same tile, but is this processing too fast and an attempt to add the same tile? I couldn't find any reason why an error would occur even though there was a branch within the for statement repeat process. Even if I turn off the tile where the error occurred, the error occurs in a different location, so the location of the tile doesn't seem to matter. ArgumentException: An item with the same key has already been added. Key: (-3.00, 0.00, -2.00) System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) (at <f22cb97e7aa5412ba04225fa1fc145f2>:0) System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) (at <f22cb97e7aa5412ba04225fa1fc145f2>:0) ProgressiveLevelEnemySpawner.SpawnEnemiesOnNewTiles (UnityEngine.Vector3 currentTilePosition) (at Assets/Scripts/Large Level Procedural Generation/ProgressiveLevelEnemySpawner.cs:59) ProgressiveLevelEnemySpawner.HandleNavMeshUpdate (UnityEngine.Bounds Bounds) (at Assets/Scripts/Large Level Procedural Generation/ProgressiveLevelEnemySpawner.cs:174) AreaFloorBaker.HandleNavMeshUpdate (UnityEngine.AsyncOperation Operation) (at Assets/Scripts/Large Level Procedural Generation/AreaFloorBaker.cs:120) UnityEngine.AsyncOperation.InvokeCompletionEvent () (at <240ff6271d47469a95269de220922c38>:0)
any idea how could i rotate an object with an overshoot? something like a elastic (springeffect)?
Hello, I have a question of this lecture. After stopping play mode, I got this error NullReferenceException: Object reference not set to an instance of an object FloorSection.OnDisable () (at Assets/Scripts/Level Generation/FloorSection.cs:13) (+999 times) Is it related to Procedural Level Tutorial #13? Should I remove base.Despawn from this script(FloorSection) if I need runtime navmesh only? Anyway, I downloaded File from Tutotrial #26 because it includes "enemy attack" tutorial too.
Hey man, i had some doubts about the implementation and would like to know if you have a group on discord that could help me ?
wonderful music, so calming
hi i just wondering can we use custom pre built models outside from blender etc?
Yup!
Is there a way to activate/disactivate a NavMeshLink when we need? right now the solution for me is to use a NavMeshObstacle to block either start point of end point.
Great video!
I needed that laugh today xD
😁
simply awesome....following this from long time....a wonderful n a great series ,,,,, here only i am having question is why we need to create attack layer or humanoid quaternios,,,,??? cant in new layer v can just pass our animation state directly?
yes YOU!
I thought making a mini map was going to hard. It was the easiest thing I’ve done.
I'm doing a 2d game with this idea. For the startVelocity, i have something like this. Vector2 startVelocity = throwPower * speed / mass speed changes depending on if its going left or right. Would this work?
Nevermind, i fixed it! Thanks for this video, its helping me with the trajectory for an AI jumping, falling, etc.
I love your narration and videos man, thank you so much for your help!
Really cool!
Thanks!
More UI Toolkit videos!
The beautiful man is back to improve my game
😂
The microgame is such a neat idea, thank you for your work !
Hello, I want to ask why the data.Target I get from Perform(IMonoAgent agent, AttackData data, ActionContext context) in MeleeAction.cs is always null, but it is not in WanderAction.cs
Hello I'm new to the series, In which video the CommonData.cs script is?
In this video around 08:09
great video. thank you.
You are welcome! 🙌
ZOMBOCOM.
Hello there, i just found out about your channel and im loving the ai series, i would like to know if you think about making a video on HTN (hierarchical task network), wich as far as i understood is a upgrade to goap.
I have not considered that yet. I'll give it some thought
Hi, I've created a Third person shooter game. The problem is that it has both input system (new & old). I'm also using fixed joystick. But when I build it for android and run it from my mobile device the joysticks collides with the touch screen and not working separately. Any solution?
Would I need another GoapSetConfigFactory with its specific dependency injector if I wanted to support multiple types of enemies/NPCs ? I'd guess I could rewrite the GoapSetBinder to take in a SetName. What if I want the same enemy type to have different Configs? Also using the ScriptableObjects configs could lead to errors no? In the sense that you could put two different configs one on the GOAP system and another wrong one on the behaviours. What if the same action is used by different enemies? Maybe these values could come from the CommonData? thoughts?
Regarding the DependencyInjector, it depends on how divergent your enemy types are. If you have them set up with pluggable behaviors and configurations like what we've set up here, you can likely use the same DependencyInjector. If your AI will have totally different goals, then you will probably need different GoapSets. That could be handled all in one GoapSetConfigFactory, or you could have multiple. Regarding the ScriptableObjects, because they're just data you can create as many as you'd like. I think we have it designed a little simplistically here because we only have the 1 enemy type. You'd probably need some kind of data model linking the configurations to the enemy type so we don't run into the problem you're describing.
@@LlamAcademy thank you so much for the answer! I managed a solution for multiple agent types :)
doesn't work on 2022 i think
Chris, as a junior game developer I have a lot of respect for you, you're doing a great job! Greetings from another part of the world.
Thank you 🙏! That means a lot to me.
can you maybe make a tutorial on enemie formations😊
what if I don't want it to just be able to be touched on the left side?
Then just don't check that condition 🙂
I tried the two week trial. Mostly the programming part, it worked great! Very impressed with muse. I have another AI programming asset from the unity store, but muse seems to be much better in understanding what i mean. As I have the challenge of not being native English it sometimes can be harder to describe what you mean, but Muse seems to have quite a broad understanding and otherwise if I just explain it in text after the first attempt, it will understand and adjust the code properly.
Thank you for sharing your experience!
Could someone please explain how to use this in a basic game not having the Demo.cs stuff? Like I have a simple player with a health int, ammo int, etc. How do I use it? Do i have to modify the existing player controller to have all new Data stuff?
In this demo class here is just showing us the "game data" that is in PlayerStats. I think I didn't do a good job explaining in this video that you need a Serializable data structure to store to the file. If your game has all your data stored on a monobehavior you have to do some work or refactoring to have a "clean" serializable class to save/load on the disk.
I did everything but it doesn't seem to be working, as I don't hear any footstep sounds. I double checked to make sure I had the right texture and I do. Could it be that I'm using HDRP?
I don’t think HDRP affects this but honestly haven’t used HDRP to know for certain
"Hey chris here from mom academy " youtube Subtitle (Nice Video btw ;))
🤣 here to help you make your motherhood dream become a reality
How to specify specific custom "NavMeshArea" in QueryFilter? Not "Walkable" \ allTypes
You can use the helper NavMesh.GetAreaFromName for other area types. docs.unity3d.com/ScriptReference/AI.NavMesh.GetAreaFromName.html
I tried this (NavMesh.GetAreaFromName). However, it didn't work for me due to the "Walkable" in the scene. And it was always taken as priority by default, ignoring the mask. When I replaced Walkable with custom area, the taco option worked!
I'm using 2022 3.6f 2D and the [SerializeField] private ParticleSystem.MinMaxCurve curve is giving me Nullreference SerializedObject of SerializedProperty has been Disposed Error. how do i fix this?
after some suffering I find that I can prevent the error by not showing the script on inspector when entering play mode but now no matter what I do the curve.evalute give 0 as result really frustrated at this because I remember I achieved the correct result following this same video 1.5 years ago
i fix it!, i just create a ParticleSystem Object on the scene. and call it's MinMaxCurve Var for use
Hmm. That’s weird. Never ran into that one before. Thanks for the solution!
Cool! Does the unity shader graph also work on 2D sprites?
Yup, you can create sprite shaders with shader graph as well!
I love seeing your videos. This was a really great overview of each solutions for IK in Unity, and you showed the use cases of each and summed it all up at the end! I have used Unity’s Animation Rigging package and I agree with you that you can do a lot with this and rolling your own scripts. I brought Final IK on sale so I’ll be diving into testing that soon.
Thanks 🙏
It is great tu great tutorial, there is one thing i don't understand. In "AttackData" script, how did you make link to Animator? How can I reference other objects there? I am changing animations from other script like "agentController" but I cannot get references to this one.
I did it with the [GetComponent] annotation from the GOAP system we’re using here. You can assign it manually with a standard GetComponent as well.
@@LlamAcademy Hi and thank you for the hint. I was actually playing with this system for a past few days and it is really cool. I am doing some small modifications to make it compatible with A* Project, and it looks very promising so far. :) One observation that I want to make, for actions and sensors it is not really necessary to have an Injection system. It is perfectly fine to grab a lot of info with [GetComponent] annotation.
Great Stuff brother!
Appreciate it!
Cool tutorial, as always. The best moment for me is Decouple Stripes from Mesh UVs, thanks for that, very helpful!
🙏
when I click buy on my iPhone it doesn't open the typical apple wallet and allow Face ID to let me pay. Instead I just get a little prompt that asks me to type in my appleID email and password. Other games have the wallet appear with all the product information displayed in a nice interface. How can I get my in app purchases to look like this?
What is the point of making it Lit shader? Unlit would be more optimized by all means.
If you don't want it to be emissive you could go Unlit for sure
@@LlamAcademy Color is a vector output, it can go beyond 1f, it is the same as emission but not calculating pbr render which is not in use anyways.
I'm teaching my kids about making games and my project I had planned for tonight after work was to make a shader almost exactly like this. Thanks for doing all the heavy lifting for me, haha.
Just what I needed
Great to hear!
great shader! thank you, and really good explanations on how the nodes effect the input and what to expect with the output. I have a model with lots of subcomponents, is there a way to have them all effected? or will I have to make a shader for each (color? mesh?)
Thanks! If you have a model with a bunch of sub meshes, you have a few options. You could make a Material for each of them that uses this shader and have similar or the same configuration. Depending on what models you're using, it may be easier to have a single "combined" mesh with all of the components together using a single material using this shader. Once you place the object, swap out for a prefab with what you currently have.
@@LlamAcademy thnx. I have an underwater ship model so props/rudder/flaps/doors/anchor all are separate GOs (I really should have prefaced that) and different colors (about 150 different GOs/meshes) so was curious if I have to make one for each (or per shared color, about 6 colors) or need a different one for all 150ish GOs
@@sxsignal really depends on how you want it to work. Either way could be okay. You can also dynamically change the shader in a script with Shader.Find(): docs.unity3d.com/ScriptReference/Shader.Find.html which may be easier in this case to update the material of the objects with a different shader at runtime and flip it back when you're ready
@@LlamAcademy excellent thanks will try that out
Hello, Wonderful Tutorial. I need help. These 3 lines giving me an error. ETouch.Touch.onFingerDown += Touch_onFingerDown; ETouch.Touch.onFingerUp += Touch_onFingerUp; ETouch.Touch.onFingerMove += Touch_onFingerMove; error:CS103 on the "Touch_onFingerDown/Up/Move" the name does not exist in the current context.
You have to create those methods in the PlayerTouchMovement.cs class. You can see them at 07:11
when its in therm of mobile games, I aim for it to be able to run at 60fps on a nintendo 3ds which require absolutely incredible optimisation and well designed models and textures as if it runs, it will be able to run at above 60fps on every phones that are 15yo or newer the 3ds having a generally modern arm cpu makes codes that run on it run really well on many arm android devices