LlamAcademy

LlamAcademy

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

Пікірлер

  • @skyswimsky1994
    @skyswimsky19948 сағат бұрын

    Does this keep in mind terrain weight?

  • @MaverickPlayer
    @MaverickPlayer10 сағат бұрын

    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)

  • @RDD87z
    @RDD87z18 сағат бұрын

    any idea how could i rotate an object with an overshoot? something like a elastic (springeffect)?

  • @MaverickPlayer
    @MaverickPlayerКүн бұрын

    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.

  • @rbr0319
    @rbr03192 күн бұрын

    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 ?

  • @bujinkanatori
    @bujinkanatori2 күн бұрын

    wonderful music, so calming

  • @Rdp0300
    @Rdp03002 күн бұрын

    hi i just wondering can we use custom pre built models outside from blender etc?

  • @LlamAcademy
    @LlamAcademy2 күн бұрын

    Yup!

  • @user-yx5bf7dp4s
    @user-yx5bf7dp4s2 күн бұрын

    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.

  • @jednooki555
    @jednooki5553 күн бұрын

    Great video!

  • @ChristinaCreatesGames
    @ChristinaCreatesGames3 күн бұрын

    I needed that laugh today xD

  • @LlamAcademy
    @LlamAcademy2 күн бұрын

    😁

  • @maitrykotak3703
    @maitrykotak37033 күн бұрын

    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?

  • @ksong5589
    @ksong55893 күн бұрын

    yes YOU!

  • @jaulloa21
    @jaulloa214 күн бұрын

    I thought making a mini map was going to hard. It was the easiest thing I’ve done.

  • @NavaNoidGMD
    @NavaNoidGMD4 күн бұрын

    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?

  • @NavaNoidGMD
    @NavaNoidGMD4 күн бұрын

    Nevermind, i fixed it! Thanks for this video, its helping me with the trajectory for an AI jumping, falling, etc.

  • @tufanaydin6340
    @tufanaydin63404 күн бұрын

    I love your narration and videos man, thank you so much for your help!

  • @franciscooteiza
    @franciscooteiza4 күн бұрын

    Really cool!

  • @LlamAcademy
    @LlamAcademy4 күн бұрын

    Thanks!

  • @NaNaNaS_000
    @NaNaNaS_0004 күн бұрын

    More UI Toolkit videos!

  • @1x5x7
    @1x5x74 күн бұрын

    The beautiful man is back to improve my game

  • @LlamAcademy
    @LlamAcademy4 күн бұрын

    😂

  • @captainnoyaux
    @captainnoyaux4 күн бұрын

    The microgame is such a neat idea, thank you for your work !

  • @quocbaovo7488
    @quocbaovo74884 күн бұрын

    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

  • @ZangJM
    @ZangJM6 күн бұрын

    Hello I'm new to the series, In which video the CommonData.cs script is?

  • @LlamAcademy
    @LlamAcademy6 күн бұрын

    In this video around 08:09

  • @lando6583
    @lando65836 күн бұрын

    great video. thank you.

  • @LlamAcademy
    @LlamAcademy6 күн бұрын

    You are welcome! 🙌

  • @hugjuffs
    @hugjuffs6 күн бұрын

    ZOMBOCOM.

  • @rbr0319
    @rbr03197 күн бұрын

    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.

  • @LlamAcademy
    @LlamAcademy6 күн бұрын

    I have not considered that yet. I'll give it some thought

  • @1onGoogle
    @1onGoogle7 күн бұрын

    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?

  • @maximdaigle
    @maximdaigle9 күн бұрын

    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?

  • @LlamAcademy
    @LlamAcademy6 күн бұрын

    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.

  • @maximdaigle
    @maximdaigle5 күн бұрын

    ​@@LlamAcademy thank you so much for the answer! I managed a solution for multiple agent types :)

  • @lucutes2936
    @lucutes29369 күн бұрын

    doesn't work on 2022 i think

  • @ralevum6818
    @ralevum681810 күн бұрын

    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.

  • @LlamAcademy
    @LlamAcademy9 күн бұрын

    Thank you 🙏! That means a lot to me.

  • @andaoking
    @andaoking11 күн бұрын

    can you maybe make a tutorial on enemie formations😊

  • @kolithehapty4883
    @kolithehapty488313 күн бұрын

    what if I don't want it to just be able to be touched on the left side?

  • @LlamAcademy
    @LlamAcademy12 күн бұрын

    Then just don't check that condition 🙂

  • @Jorendo
    @Jorendo13 күн бұрын

    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.

  • @LlamAcademy
    @LlamAcademy13 күн бұрын

    Thank you for sharing your experience!

  • @willcroft5105
    @willcroft510513 күн бұрын

    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?

  • @LlamAcademy
    @LlamAcademy12 күн бұрын

    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.

  • @holyscorpion1006
    @holyscorpion100615 күн бұрын

    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?

  • @LlamAcademy
    @LlamAcademy13 күн бұрын

    I don’t think HDRP affects this but honestly haven’t used HDRP to know for certain

  • @emememe17
    @emememe1715 күн бұрын

    "Hey chris here from mom academy " youtube Subtitle (Nice Video btw ;))

  • @LlamAcademy
    @LlamAcademy15 күн бұрын

    🤣 here to help you make your motherhood dream become a reality

  • @artinstroukeprod
    @artinstroukeprod16 күн бұрын

    How to specify specific custom "NavMeshArea" in QueryFilter? Not "Walkable" \ allTypes

  • @LlamAcademy
    @LlamAcademy13 күн бұрын

    You can use the helper NavMesh.GetAreaFromName for other area types. docs.unity3d.com/ScriptReference/AI.NavMesh.GetAreaFromName.html

  • @artinstroukeprod
    @artinstroukeprod12 күн бұрын

    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!

  • @umtbmt2395
    @umtbmt239516 күн бұрын

    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?

  • @umtbmt2395
    @umtbmt239516 күн бұрын

    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

  • @umtbmt2395
    @umtbmt239516 күн бұрын

    i fix it!, i just create a ParticleSystem Object on the scene. and call it's MinMaxCurve Var for use

  • @LlamAcademy
    @LlamAcademy13 күн бұрын

    Hmm. That’s weird. Never ran into that one before. Thanks for the solution!

  • @nicoli3143
    @nicoli314316 күн бұрын

    Cool! Does the unity shader graph also work on 2D sprites?

  • @LlamAcademy
    @LlamAcademy13 күн бұрын

    Yup, you can create sprite shaders with shader graph as well!

  • @tientam779
    @tientam77916 күн бұрын

    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.

  • @LlamAcademy
    @LlamAcademy12 күн бұрын

    Thanks 🙏

  • @jutekpixel
    @jutekpixel17 күн бұрын

    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.

  • @LlamAcademy
    @LlamAcademy13 күн бұрын

    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.

  • @jutekpixel
    @jutekpixel12 күн бұрын

    @@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.

  • @PolyZero
    @PolyZero17 күн бұрын

    Great Stuff brother!

  • @LlamAcademy
    @LlamAcademy17 күн бұрын

    Appreciate it!

  • @DanWarrioR
    @DanWarrioR17 күн бұрын

    Cool tutorial, as always. The best moment for me is Decouple Stripes from Mesh UVs, thanks for that, very helpful!

  • @LlamAcademy
    @LlamAcademy17 күн бұрын

    🙏

  • @seanlynch4354
    @seanlynch435417 күн бұрын

    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?

  • @realotoko
    @realotoko18 күн бұрын

    What is the point of making it Lit shader? Unlit would be more optimized by all means.

  • @LlamAcademy
    @LlamAcademy17 күн бұрын

    If you don't want it to be emissive you could go Unlit for sure

  • @realotoko
    @realotoko17 күн бұрын

    @@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.

  • @Spridonculous
    @Spridonculous18 күн бұрын

    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.

  • @worldkho
    @worldkho18 күн бұрын

    Just what I needed

  • @LlamAcademy
    @LlamAcademy17 күн бұрын

    Great to hear!

  • @sxsignal
    @sxsignal18 күн бұрын

    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?)

  • @LlamAcademy
    @LlamAcademy18 күн бұрын

    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.

  • @sxsignal
    @sxsignal18 күн бұрын

    @@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

  • @LlamAcademy
    @LlamAcademy18 күн бұрын

    @@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

  • @sxsignal
    @sxsignal18 күн бұрын

    @@LlamAcademy excellent thanks will try that out

  • @justfine9809
    @justfine980918 күн бұрын

    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.

  • @LlamAcademy
    @LlamAcademy18 күн бұрын

    You have to create those methods in the PlayerTouchMovement.cs class. You can see them at 07:11

  • @SpeedyGwen
    @SpeedyGwen18 күн бұрын

    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