Тёмный
git-amend
git-amend
git-amend
Подписаться
Ready to master high-level Unity3D techniques?

Advanced Unity3D tutorials to help get your game in front of your playtesters faster!

Build your indie game like an expert with:
- comprehensive core mechanics
- programming patterns
- proper architecture
- software engineering principles
- advanced C# language features

Learn how to take your game from concept to playtest from a:
- Unity Insider & Certified Unity Professional Programmer

New videos with source code every week!

🔔 Subscribe and hit the bell to get notifications!
R3: Observer Pattern on Steroids
18:28
21 день назад
Essential Elements of Cinemachine 3.1
17:12
28 дней назад
3 Unity C# Misconceptions
15:25
Месяц назад
Unity Playables is Actually a Game-Changer
13:47
2 месяца назад
AVOID These Programmer Resume Mistakes!
15:46
3 месяца назад
6 Code Smells REFACTORED to Patterns!
15:41
3 месяца назад
The Unity HACK that the PROS know
21:27
4 месяца назад
How to Code Behaviour Trees in Unity C#
23:19
4 месяца назад
Optimal Goal-First Pathfinding - D* Lite
20:49
5 месяцев назад
The #1 Way To Get Better At Programming
22:43
5 месяцев назад
Mediator Pattern - Reduce Chaotic Dependencies
15:47
6 месяцев назад
Top 3 Problems Solved With Git Commands
27:55
6 месяцев назад
Loading Scenes On Demand Has Never Been Easier!
16:00
6 месяцев назад
Комментарии
@iozsaygi
@iozsaygi 28 минут назад
Great content, quick question. Considering A* already considering nodes that ara adjacent/neighbor, does it makas sense to use Octrees for that? AFAIK A* already clips the search space.
@git-amend
@git-amend 8 минут назад
Octrees reduce the total number of nodes A* needs to consider, especially in large 3D spaces, by focusing the search on relevant areas. It’s like the difference between searching through a uniform voxel grid versus a space that’s subdivided only where more detail is needed.
@leonardofraga5130
@leonardofraga5130 Час назад
Awesome video, awesome channel. Thanks very much, man! If anyone doesn't see the Guid value in the inspector, is because a PropertyDrawer class is showing that, called something like SerializableGuidDrawer.cs. You can find it in his repository (which he mentions on the video Description)
@nein3405
@nein3405 3 часа назад
Thanks!
@git-amend
@git-amend Час назад
No problem! Thanks for the super!
@DarthBiomech
@DarthBiomech 6 часов назад
This is cool! I suppose, to make route look more organic, you'd need some kind of optimization algorithm? Something like tracing between nodes to see if they're occluded or something
@git-amend
@git-amend 5 часов назад
Yes, a good strategy for real time optimization would be to check if direct routes between nodes are clear, skipping unnecessary nodes for a more organic and direct path.
@starplatinum3305
@starplatinum3305 8 часов назад
bro cooked 🗣🔥🔥🔥
@git-amend
@git-amend 8 часов назад
Thanks 💯
@daslolo
@daslolo 8 часов назад
Fuck! Node scripts are so verbose Yet another everengineered unity piece of shit
@RonaldMcDonald-o5z
@RonaldMcDonald-o5z 10 часов назад
For the algo!
@git-amend
@git-amend 9 часов назад
Thank you!
@NihongoWakannai
@NihongoWakannai 17 часов назад
I just recently watched the GDC talk from warframe devs about octree 3D pathfinding and now you release this video lol GDC 2015: Dan Brewer - "Getting off the NavMesh: Navigating in Fully 3D Environments"
@git-amend
@git-amend 12 часов назад
Oh, I haven't seen that one... will look it up.
@glennmerrill88ify
@glennmerrill88ify 17 часов назад
How would you handle moving objects within the tree? I've been looking into Quad Trees recently and generally the simplest thing to do is just regenerate the entire tree on update, would this same thing apply for Octrees? Great video by the way, always look forward to your videos.
@dav1dsm1th
@dav1dsm1th 16 часов назад
Yes, unfortunately, you'd have to regenerate the octree each frame (or once the data is considered stale) as the performance gained using the octree is inherent in the structure of the tree. But this can still be quicker than brute force testing the distance to all objects of interest in a scene. You could also have two octrees, one in use and one being populated on another thread - and then swap which one is active (in the same way a GPU uses double buffering).
@nein3405
@nein3405 2 часа назад
if your whole world is so dynamic that everything changes all the time then yes. i doubt it actually is tho, you probably have a lot more static objects which are relevant for actual pathing than dynamic ones. so no, you dont necessarily need to regenerate the whole tree each frame, you can just handle dynamic objects differently.
@simonnordon8421
@simonnordon8421 18 часов назад
Another great video. Top Quality content.
@git-amend
@git-amend 12 часов назад
Much appreciated!
@SubatomicPlanets
@SubatomicPlanets 18 часов назад
I only discovered your channel a week ago or so from a comment on reddit. I immediately subscribed! I especially love this video because I recently looked into this sort of thing. You are clearly very talented, so I wanted to ask if you could make this or something similar an asset? I would like a 3d navmesh that also works on low end devices and uses little storage. I recently looked up this sort of thing for my game but there is no simple asset right now I think. Thanks for the video anyway, it's very cool!
@git-amend
@git-amend 12 часов назад
Well the problem with making Assets is that you have to also support and maintain them - something I don't have time for at the moment. Another subscriber mentioned they have an Asset already on the store that does something similar though, but I'm not sure the name of it.
@damonfedorick
@damonfedorick 19 часов назад
Nice!
@git-amend
@git-amend 12 часов назад
Thank you! Cheers!
@RoxGame
@RoxGame 20 часов назад
Just a stupid question: can this system be integrated as a node in a Behavior Graph?
@git-amend
@git-amend 20 часов назад
While both are node based systems, I think the purpose is a bit too different. An Octree is mainly used to divide up space and not specifically for processing logic.
@frontalachivment3604
@frontalachivment3604 21 час назад
How this is possible that you are only one on RU-vid who do this kind content. What does it tell about other authors who stuck at "this is function, ok? This is how you create monobehaviour?" level :D There is so many of them they have 200k+ subscribers and look like they learn with audience basics pretending being expert xD
@git-amend
@git-amend 20 часов назад
Well, it's true that there is a ton of beginner content out there... but there are a few other creators out there that do more advanced topics regularly. Check out Warped Imagination and Iain McManus if you haven't yet!
@simonnordon8421
@simonnordon8421 18 часов назад
@@git-amend It makes me feel like 'advanced' unity is quite niche.
@NihongoWakannai
@NihongoWakannai 17 часов назад
You should watch GDC talks, there's one on this exact topic GDC 2015: Dan Brewer - "Getting off the NavMesh: Navigating in Fully 3D Environments"
@hop3studio511
@hop3studio511 4 часа назад
​@@git-amend super agree, at the curent time, you and warped imagination and also lain mc manus are the best source for advanced unity tutorial in my mind, there's also other cover advanced topic, but many i see no longer make video Also i found sharp accent
@TrentSterling
@TrentSterling 21 час назад
Wow, this technique can be used for many things. Performant Astar based audio occlusion here I come!
@git-amend
@git-amend 20 часов назад
I hadn’t thought of that! What an interesting idea!
@janus798
@janus798 22 часа назад
Oh man, this would've been incredible like a year ago when I was designing a 3d pathfinding system. Settled on low precision voxels due to time constraints, but I always wanted to refactor it with octrees
@git-amend
@git-amend 22 часа назад
Well, voxels are a good way to go too, just a little simpler I guess.
@MysticCoder
@MysticCoder 23 часа назад
@git-amend Out of curiosity, what version of Rider did you settle on?
@git-amend
@git-amend 23 часа назад
Just the latest 2024.2.5 actually, but I'm trying a filter in my video editor that makes the colors a bit brighter.
@MysticCoder
@MysticCoder 23 часа назад
@@git-amend Oh, OK. For some reason I thought you had stopped somewhere along the way (cost!), maybe due to the way you have the interface set up. I really like Rider, but by George they like to charge you for it.
@git-amend
@git-amend 23 часа назад
I see. I've had a license for dotUltimate for many years now so I get the max continuity discount of 40% off every year which definitely helps.
@MysticCoder
@MysticCoder 22 часа назад
@@git-amend ahh.. that was not on my radar. I don't use Unity or Rider enough these days to consider that, but perhaps this could be useful info for others.
@gamheroes
@gamheroes 23 часа назад
You listened to my prayers and made the video I requested! :O Cheers to you!
@git-amend
@git-amend 23 часа назад
Hey no problem, hope you find it helpful!
@gamheroes
@gamheroes 23 часа назад
¡Gracias!
@git-amend
@git-amend 23 часа назад
Thanks for the super!
@zimnelredoran9985
@zimnelredoran9985 День назад
Thank you for the top notch content! Very interesting topic :D Made my Sunday ; )
@git-amend
@git-amend 23 часа назад
My pleasure!
@enbawatches
@enbawatches День назад
This comment is just some food for the algorithm
@git-amend
@git-amend День назад
This reply as well then 😁
@miltgmend
@miltgmend День назад
insane. I was looking for this.
@git-amend
@git-amend День назад
Perfect timing! Hope it helps you out!
@TheArghnono
@TheArghnono День назад
Nice explanation, clear code and an oddly satisfying spaceship loop 🙂
@git-amend
@git-amend День назад
Glad you enjoyed it! I caught myself watching the loop for quite a while last night lol. 😄
@VikingPingvin93
@VikingPingvin93 День назад
I can't even keep up with all of these videos you are making! It's one thing to watch them, completely different understanding them. Thanks for all your work!
@git-amend
@git-amend День назад
Thanks so much for watching! Take your time with the concepts, and feel free to ask questions if anything’s unclear!
@techdave99
@techdave99 22 часа назад
It's another thing to make them. Imagine the hours spent on each video. Wish i had the money to pay for it. Hope git-amend doesn't burn out.
@mikekozlov3484
@mikekozlov3484 День назад
That's very cool, I actually sell on Asset Store an asset that does exactly that.
@git-amend
@git-amend День назад
Oh yeah? Which one, I'll check it out!
@bluzenkk
@bluzenkk День назад
i wish you made this video 10 years ago... so i dont have to learn this the hard way 10 years ago.
@git-amend
@git-amend День назад
Right? If only I had a time machine!
@techdave99
@techdave99 День назад
Wondering what might be useful to determine if an animation should be done/rendered based on the player's distance. Anyone have an idea?
@mikekozlov3484
@mikekozlov3484 День назад
Nah, building an octree is extremely expensive for computation, you can't rebuild it very often.
@techdave99
@techdave99 22 часа назад
@@mikekozlov3484 Turns out that Unity has a culling mode for animation. just had to look on the animation component.
@jamesesmond6774
@jamesesmond6774 День назад
I'm comparing this to Behavior Trees by Opsive, and there are so many nice features on this one. Really looking forward to experimenting with this!
@git-amend
@git-amend День назад
I’ve heard that a few times now. I think that barring the addons, it will be a good alternative .
@techdave99
@techdave99 День назад
less than 400 views in the first hour. Hope it still gets as many views as last week's video.
@git-amend
@git-amend День назад
Haha they can’t all set new records, this one is doing pretty good.
@relinqu1shed
@relinqu1shed День назад
This channel is like school, but interesting and educational!
@git-amend
@git-amend День назад
Haha thanks!
@techdave99
@techdave99 День назад
When I first read the title, I thought that I might have to go outside. But then I remembered that Octrees are in the computer. Yay, don't have to go outside!
@git-amend
@git-amend День назад
🌲
@Xeros08
@Xeros08 День назад
And that they are also upside down!
@정동우-n2x
@정동우-n2x День назад
It took me a month to implement quadTree, which is amazing. I always learn.
@git-amend
@git-amend День назад
Nice, hope you like this vid!
@정동우-n2x
@정동우-n2x День назад
@@git-amend I like all yours videos, not just 'this vid'!
@inrage7871
@inrage7871 День назад
This channel is gem! Thank you for your content 😍
@git-amend
@git-amend День назад
Thank you!
@retroman7581
@retroman7581 День назад
Uh, interesting topic! :D
@git-amend
@git-amend День назад
Thanks, hope it's useful.
@git-amend
@git-amend День назад
Happy Sunday everyone! I hope this video helps to explain Octrees and gives you some ideas for how you can use them in your projects!
@x2andrew
@x2andrew День назад
Thank you for the video. I'm enjoying your content so much! What you think about Zenject and ECS frameworks?
@git-amend
@git-amend День назад
Personally, I've been more interested in Reflex these days than Zenject, however I think both Zenject and ECS are great choices for some projects.
@RaineAlgessar
@RaineAlgessar День назад
A small suggestion: When you're using non-standard methods, please tell us where they are coming from. Took a while to find InRangeOf(). Just a quick mention of which class it is in would be nice.
@KYL3R64
@KYL3R64 День назад
I saw the reddit post about this package being released, I'm glad someone already made a video about it! :)
@git-amend
@git-amend День назад
Hope you enjoy it!
@bioburden
@bioburden День назад
Interesting, could this replace Unity Visual Scripting (if you built your own nodes) and would it be more performant I wonder?
@git-amend
@git-amend День назад
I'm sure it can handle a lot of that. Another subscriber asked on the Unity Discussions about handling 500 agents, and they said no problem.
@fokeyjo
@fokeyjo 2 дня назад
The only thing that's not right about this video is the name you used for your spline follow class, it should be AwesomeFollow instead of SmoothFollow 😆 I do like that they split the components up more
@git-amend
@git-amend 2 дня назад
😁
@nael_nocteon
@nael_nocteon 3 дня назад
Hey @git-amend, marvelous video as always. Thank you so much! I had a few questions though. Whenever you Register and create your bindings on OnEnable, wouldn't that mean that the Binding field would get overridden each time the game objects gets enabled? My intuition tells me that creating the binding should live inside Awake(), and Registering / Unregistering should live inside OnEnable() and OnDisable() respectively. Other question is: what is the gain from adding the IEventBinding<T> layer to the architecture? Couldn't we just use Action<T> and Action? Or at least make the whole IEventBinding logic private to the EventBus, so it's encapsuled inside of it. Moreover, IEventBinding does not have the `event` keyword, meaning the event could be overwritten or set to null by anyone manipulating an instance of IEventBinding. What are your thoughts about that? Thanks again!
@git-amend
@git-amend 3 дня назад
Some interesting questions with no concrete answers. The video is not meant to be the epitome of all Event Bus implementations, in fact it is not because I have not included the full functionality in the video or the repository to keep it simple. Where you create bindings and handle registration depends entirely on your own project. The reason I have a layer of abstraction via the EventBindings is so I can also have extra features such as logging and debugging, or even change the underlying delegate without affecting the entire solution.
@lizkimber
@lizkimber 3 дня назад
This is one of the few channels who dont just show how to do things in a beginner way, but how to up your game, its a very valuable channel and really should be way more popular. I like that nearly every video is self contained enough that you can go there, view a thing, decide yes, i want that, and then go off and implement the thing in a project without too much of the oh, you need to have 15 other videos worth of stuff in the project before it even dreams of working
@git-amend
@git-amend 3 дня назад
Thanks for the kind words!
@RunninglVlan
@RunninglVlan 3 дня назад
On 11:28 following line is missing in TakeDamage method: `CurrentHp.Value -= damage`
@banditbloodwyndevs8782
@banditbloodwyndevs8782 3 дня назад
looks awesome. One question I have: How good is the performance of this? What if I want to create 2D scenes with about 500 agents, controlled by behaviour graphs?
@git-amend
@git-amend 3 дня назад
I haven’t done any massive tests like that, but you will get an answer quickly if you ask in Unity Discussions under the release thread discussions.unity.com/t/behavior-package-1-0-1-is-released-update-1-0-2-is-out/1521797
@banditbloodwyndevs8782
@banditbloodwyndevs8782 3 дня назад
@@git-amend Got an answer: "The performance should be good in general, we are following best practices & we should be not creating to much garbage or overhead at runtime. 500 agents will be fine." So, let's hope for the best.
@revilorere
@revilorere 4 дня назад
I love this, but the problem is you cant have dependencies to your own packages, the package manager just doesnt support Github links as dependencies. It has to be the com.packagename.etc format. And its very frustrating for a modular packaging setup. Im still trying to figure out a solution, and i think the cloest ive gotten is via hosting your own com. packages using docker, but i didnt quite get it to work, but i do think that is the highest chance of getting this to work. I'd love some advice here! And as an example of what i want, Say i have a package that gives me the foundation for creating templates, but then i have multiple subpackages, all of them needing just one template, but i dont want all of them to have the whole template boilerplate code
@git-amend
@git-amend 4 дня назад
Why don't you just import them sequentially, dependencies first. For example, if I had my own package that depended on UniTask, I would put UniTask first on the list of imports, followed by my custom package that depends on it.
@revilorere
@revilorere 4 дня назад
@@git-amend Ideally I'd just have one package because the dependencies could theoretically end up being many and it's a hassle. However I hadn't thought of something that simple and it might be an acceptable workaround! I will give it a try, thank you!
@niuage
@niuage 4 дня назад
Thanks YT for recommending this vid. I was trying to find your channel again and couldnt ^^.
@git-amend
@git-amend 4 дня назад
Welcome back!
@CiroContinisio
@CiroContinisio 4 дня назад
Very good and in-depth video, thanks!
@git-amend
@git-amend 4 дня назад
Very welcome!
@PaulLovato
@PaulLovato 4 дня назад
Note if you put your Player (Hero) on the DontDestroyOnLoad level: "It seems like the issue you're encountering is due to the way Unity handles objects marked with DontDestroyOnLoad. Specifically, your Hero object is a singleton that persists across scene loads because of the DontDestroyOnLoad(gameObject); call in its Awake() method. This causes it to reside in a special scene called the DontDestroyOnLoad scene, which is not part of the active scene hierarchy. When you use FindObjectsByType<T>() or FindObjectsOfType<T>(), these methods typically search only within the active scene's hierarchy and do not include objects in the DontDestroyOnLoad scene. As a result, your Bind<T, TData>() method in SaveLoadManager is unable to find the Hero instance, and thus the Bind call doesn't link up the IBind data as expected."