Тёмный

Observer Pattern - Game Programming Patterns in Unity & C# 

Jason Weimann
Подписаться 209 тыс.
Просмотров 90 тыс.
50% 1

Check out the Course: bit.ly/3i7lLtH
-------
I'm doing a full series based on the book 'game programming patterns'. It's full of a lot of great gems including the command pattern. In this video we'll discuss the Observer pattern using an achievement system as an example.
Inspired by Robert's great book on Game Programming Patterns - amzn.to/2Ohg01Z
More Info: unity3d.college
Join the group: unity3d.group
Patreon: / unity3dcollege

Развлечения

Опубликовано:

 

21 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 131   
@arthurgentz2
@arthurgentz2 5 лет назад
Hey Jason, It's great that you're covering Nystrom's book. I was actually introduced to it by another youtuber. In the book, the patterns were sort of well explained, but the examples were a bit empty. Because you don't exactly see where they slide into a project. But since you're covering them in C# and Unity, well, that's awesome. I can't wait to finish this series man. Seriously, thank you for this.
@walterh2113
@walterh2113 5 лет назад
Great knowing you're doing a full series on the book!
@jahoopyjaheepu497
@jahoopyjaheepu497 4 года назад
The more I learn about game dev the more I learn that events are essentially the most important tool to use. Decoupling is so important for re-usability and maintenance.
@riteshkhokhani
@riteshkhokhani 2 года назад
Yes, for re-usability, code maintance and code extensibility loosely coupled code is must. and for loosely coupled code, observer pattern is must have.
@shermenz
@shermenz 5 лет назад
Jason from Unity3d collage, I'll have you know my good sir! That I was wondering how on earth will I be able to learn design patterns with unity, and your wonderful Solid series popped into my mind, well then! I went to your channel thinking I'll suggest you'll do a video or two on the subject, and lo and behold, my man delivered once again. Thank you thank you! Keep em Coming, these videos have a very deep value for us noobs compared to the shallow depths most youtubers dare to dip.
@CoReeYe
@CoReeYe 5 лет назад
I'm working in a game studio and these stuff he talked about are the things we keep discussing about every day. These videos are really useful if you want to make things in a professional way.
@nitras.design
@nitras.design 4 года назад
if that is a daily discussion topic i wouldn't stay long there.
@CoReeYe
@CoReeYe 4 года назад
@@nitras.design Why do you hate discussing architecture?
@jayocaine2946
@jayocaine2946 2 года назад
@@CoReeYe he doesn't hate it, he's just saying if the entire team is sitting around discussing things a junior should already have engrained into him you must be working for a joke of a company
@SabaFilms
@SabaFilms 4 года назад
Hey Jason, thanks for your videos! This is very good as I have been reading the game programming patterns book and have wanted to see c# specific examples and this really fits the bill!
@lukefischer8424
@lukefischer8424 5 лет назад
got the book. i find it really helpful to read a chapter, see your video and then read the chapter again. thank you for this series!
@Unity3dCollege
@Unity3dCollege 5 лет назад
Thank you :) I definitely recommend everyone take a look at the book too. He does a good job explaining how the patterns work and some of their origins.
@ThoughtExperiment
@ThoughtExperiment 5 лет назад
Keep the content coming.. design patterns with large-scale projects is the stuff I have been struggling with.
@philipwilliams9833
@philipwilliams9833 4 года назад
Man, I just clicked this video without looking who made it, and and soon as the hey whats up started I realised I had clicked another one of your amazingly informative videos. I know its an old video but thanks anyway dude!
@SunnyApples
@SunnyApples 5 лет назад
I've learned this from one of your previous videos. And I've been using it all the time.
@kobby2g8
@kobby2g8 5 лет назад
Thanks for this video. I had setup events in my game prior to watching this video but they were non-static. Making them static solved a ton of issues I was facing with null references. Edit: Also should add that (especially now that Unity supports C# 7), You can use invoke together with a null conditional '?' as a shorthand for null checking before calling like so: OnKilledEnemy?.invoke(args)
@Pedro5antos_
@Pedro5antos_ 5 лет назад
Very interesting! I'm loving this programming pattern series, and how you detail every possibility, and ways of implementing the pattern! Keep up the awesome work Jason
@Unity3dCollege
@Unity3dCollege 5 лет назад
Thank you very much! :) I really like doing examples like this, just takes a while to put together a good one that's really usable in a project but fits into a short video, but it's also a lot of fun :)
@Pedro5antos_
@Pedro5antos_ 5 лет назад
@@Unity3dCollege I was just watching the video again (1 month later), getting inspiration for coding and saw you answered my comment. Thanks for the response, I truly enjoy the content you put out for us!
@samwalter17
@samwalter17 2 года назад
Making events static is such a useful piece of information, thank you!
@Alluvian567
@Alluvian567 4 года назад
Love these videos, going to have to spend some time unpacking that syntax, never used c# events before
@unchartouille1208
@unchartouille1208 3 года назад
Thanks ! I'm a front-end Angular developper and we use A LOT the observable pattern. I'm new into unity, and I love your video. The thing that haunt us in web dev is when we have multiple sources of truth hidden everywhere in your code. This is a nightmare. Redux pattern is good.
@hplovecraftmacncheese
@hplovecraftmacncheese 2 года назад
This is a nice "make it better" implementation. I'm still in the "just make it work" stage as a noob, but I'm sure I'll get to this at some point.
@walkwithsharif3341
@walkwithsharif3341 3 года назад
Thank You Jason for explaining such clear presentation of observer pattern in unity
@cptant7610
@cptant7610 5 лет назад
I was implementing my game's inventory UI and this was exactly the kind of pattern I was looking to implement.
@marcusotter
@marcusotter 5 лет назад
Woah, new intro? Looks awesome. Thanks for these videos!
@Unity3dCollege
@Unity3dCollege 5 лет назад
Ah thx !: )
@cam4722
@cam4722 4 года назад
Another great video, Jason. Thank you!
@bletzkarn7635
@bletzkarn7635 5 лет назад
your videos are great, please keep it up, your channel will be big!
@MohamedAdelQuickDeveloper
@MohamedAdelQuickDeveloper 5 лет назад
Great man, I like your explanation a lot. Your videos helped a lot to get around things in unity. Keep up the good work. (thumbup)
@Unity3dCollege
@Unity3dCollege 5 лет назад
Thanks! :)
@maurofuentes8076
@maurofuentes8076 5 лет назад
Genius! Love watching your videos.
@MarekNowakowski
@MarekNowakowski 3 года назад
my programming skills didn't reach going out of Class yet, so it was hard to follow ;p I had a 30 year pause since Basic and Pascal were cool and your videos are helping me transition ;p cheers.
@jugibur2117
@jugibur2117 3 года назад
As always very helpful - thanks for your effort!
@tonymengelkoch7413
@tonymengelkoch7413 4 года назад
Incredibly helpful!! Thank you!
@riteshkhokhani
@riteshkhokhani 2 года назад
Very well explained, I think to learn about c# observer pattern this is the best video. thank you so much.
@geri4367
@geri4367 5 лет назад
Very useful. Great as always!
@Unity3dCollege
@Unity3dCollege 5 лет назад
Very welcome! :)
@monochromenight8943
@monochromenight8943 5 лет назад
You're the man for this.
@SirRelith
@SirRelith 5 лет назад
Hey man, been watching your videos a long time. Love your content, you are a great teacher! I just have one request. Could you use a dark theme in visual studio. I like to watch your videos at night sometimes, and it just blinds my eyes, even with my monitor brightness turned all the way down. I skipped watching some of your videos because of the blinding light. Anyways, not a huge deal for everyone I bet, just my opinion. Thanks for this great lesson! I hope to put it to good use.
@STARasGAMES
@STARasGAMES 5 лет назад
same here
@ryanzwe
@ryanzwe 5 лет назад
Yessssd
@beardordie5308
@beardordie5308 5 лет назад
Agreed.
@Unity3dCollege
@Unity3dCollege 5 лет назад
hmm, i'll definitely consider it lol. not sure how it'll feel w/ how bright my office is, but i can give it a shot :)
@monohybridstudios
@monohybridstudios 5 лет назад
This is the theme I use. Not too dark but just right for day and night use in my opinion. It says "VS 2015" but will work with 2017 no problem. There are lots more on the website as well to choose from. studiostyl.es/schemes/indie
@user-qh9xl9ry7d
@user-qh9xl9ry7d 2 года назад
this is best video for observer pattern in unity
@vitalypopuzin9473
@vitalypopuzin9473 5 лет назад
Thanx! Video about observable collections would be great!
@amirtavakoli4809
@amirtavakoli4809 2 года назад
What a nice tutorial. Thank you so much
@vox-scriptum
@vox-scriptum 3 года назад
Thank you a lot for your work!
@owofinctive8186
@owofinctive8186 4 года назад
This is useful and clear !!!
@CouchFerretmakesGames
@CouchFerretmakesGames 5 лет назад
Very useful, Thanks!
@fearshad8203
@fearshad8203 5 лет назад
Really Cool Man . Please Make More Tutorial About Game Programming Patterns :P
@DJZ3XY
@DJZ3XY 2 года назад
Too much event-based programming becomes a hard to debug mess though. Like if you have everything "loosely coupled" through events, like events for when a spell is cast, events for when it hits something, events for when it dissipates, basically everything being event-based, that starts to feel like a nightmare to debug because you're always looking for what event is triggering this thing that just happened, what's registered and not registered to my events, etc. Any thoughts or suggestions for this problem?
@everabyss
@everabyss 5 лет назад
Event Systems e.t.c after the first method you told goes over my head. Can I go with the first techniques and still its good practice?
@AlbertoFdzM
@AlbertoFdzM 5 лет назад
Thanks for this video. I have doubts about when I should use UnityEvent System and when to use C# Event.
@MMMM-vc5oi
@MMMM-vc5oi 5 лет назад
It is easy. If you have monoBehaviours, you should use UnityEvent. It is powerful while if you have plain C# classes, employ C# events. You know why UnityEvent is powerful because it decouples your codes and you add listeners/observers inside the inspector not inside codes but one big drawback is that you can not rename the functions easily because you have to add them again (missing references)
@user-xr4eh8sl8y
@user-xr4eh8sl8y 4 года назад
Thank you, man
@rickster5224
@rickster5224 5 лет назад
Thank you my good sir
@thomastum6992
@thomastum6992 5 лет назад
Thank you for your wisdom. Please do make some tutorial on events!
@Unity3dCollege
@Unity3dCollege 5 лет назад
It's on my shortlist for things to cover soon :)
@thomastum6992
@thomastum6992 5 лет назад
@@Unity3dCollege much appreciated!
@IvisibleCat
@IvisibleCat 5 лет назад
Sebastian Lague did a realy good job on explaining events. search for it on his channel.
@Tech-Guy
@Tech-Guy 4 года назад
Many sites warn that one should not use static events because of memory leaks. Did you check if this will create dependency and keep GC from collecting a gameobject that has the class with this static event of something is subscribed to it?
@janosdomboroczki8456
@janosdomboroczki8456 5 лет назад
Hi all, could someone tell me, how is the Unity ecs and job system is going to affect these patterns?
@Umbravi
@Umbravi 4 года назад
This is a really nice video on events and handlers, and how to implement them in Unity. I'm new to unity, and game design, but I'm wondering if you are familiar with the flux/redux pattern of managing state, and how would one go about a similar action -> reducer -> state subscription pattern with unity. Thanks!
@LanPodder
@LanPodder 4 года назад
Isnt that like the react way of observer pattern?
@Umbravi
@Umbravi 4 года назад
​@@LanPodder The flux pattern is a larger idea than observers, and would use observers on specific pieces of state to fulfill subscriptions. Flux details how data flows and interactions happen, not just what piece of data belongs to a or many interact-able entities.
@bogumiwyrwa216
@bogumiwyrwa216 3 месяца назад
Hello, Greate tutorial. It is any other solution to put OnPointOfInterestEntered in different place, not only in OnTriggerEnter?
@rafaelkuhn
@rafaelkuhn 3 года назад
Hey Jason what do you think about using UnityEvents and UnityActions to implement this pattern?
@alexandreclement9399
@alexandreclement9399 2 года назад
They're slower so it also depends on the optimisation you're looking for
@shaggun
@shaggun 5 лет назад
At 9:33 when you declared your static event in line 6 and then you check if it's null at line 15, In a previous video you declared the public static event like this: "public static event Action EventName = delegate {}" avoiding the null check later, is there any drawback of using that notation to avoid typing the extra 2 lines for the null check?
@Unity3dCollege
@Unity3dCollege 5 лет назад
There's no real drawback, I've just gotten in the habit of using ?.Invoke but didn't want to use that here since it's a bit outside the scope. But if you're able to use the latest .net, ?.Invoke() is the way to go IMO :)
@ZoidbergForPresident
@ZoidbergForPresident 5 лет назад
?.Invoke() ? What do you mean? How would it look here?
@vitalypopuzin9473
@vitalypopuzin9473 5 лет назад
@@ZoidbergForPresident OnPointOfInterestEnetered?.Invoke();
@mattomwit
@mattomwit 5 лет назад
@@ZoidbergForPresident hi I know it is late to comment on your question but " .? " operator basically checks if left hand of the statement is null. Here is the reference to official .net explanation. docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators
@D_RockBottoms
@D_RockBottoms 5 лет назад
I love your videos. It is great that you explain and demonstrate importent subjects that arent usually shown in other tutorial channels. A good way to implement the observable pattern in unity is to use UnityEvents in order to be able to register to the events from the editor. I really recommend this lecture ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-raQ3iHhE_Kk.html to see a good example. In my team we use a system that has 3 components. The event raiser (object) the event listener (observer) and also a class that passes parameters with the event (we call it event params). When an event is raised it passes a parameters object with the event to all the listeners. In this way you can pass different parameters. For example, if you raise an event every time the score in the game is updated then you can pass with the event an event parameters object that holds the score value. If you for example have an event that needs to pass the player state you can send an event parameters object that holds the player object or an object that holds the player state. I hope this help answer some questions i saw in the comments.
@jaxowaraxa
@jaxowaraxa 5 лет назад
Could you make more about this also with scriptable objects?
@Unity3dCollege
@Unity3dCollege 5 лет назад
Definitely. I don't normally do my observables with them, but there have been a few projects where it was a good fit, I'll see if I can put together a good example sometime soon.
@MrStoltverd
@MrStoltverd 3 года назад
I still don't get what is it you have to register... :/ Do you register the event you're looking for? Do you just make it an Observer and register it as such? if so... why? Where do you put the result of the notification? Where would one implement whatever function one may want when the observer is notified of something?
@endihidir2087
@endihidir2087 4 года назад
I will request something about Design Pattern tutorials. Can you use these patterns in a real game example more specifically? Also Can you give more example about usage area of Observer pattern in Games?
@unlockener
@unlockener 5 лет назад
I do not understand the naming convention here (I see it everywhere not just your example). Why is the event called "OnPointOfInterestEntered" and not just "PointOfInterestEntered" ? I use to name events without the "On" prefix and then the subscribed methods are named "OnEventName". It's the same like e.g. "OnCollistionEnter" is the name of the method that is called when CollisionEnter happens. I understand that it can look nice in the code "OnEvent += DoThis", "OnEvent += DoThat", but I find the readability of code and logic better when I have only one method in the class that handles the behavior if the event is raised, so I have: "EventName += OnEventName()". If you know more, please enlighten me.
@onurtnrkl
@onurtnrkl 5 лет назад
What if we have to observe multiple property in same subject, how can we implement abstract classes or interfaces. For example; We have a Player class with string name, uint level and double gold properties. How can we register OnNameChanged, OnLevelChanged and OnGoldChanged? Maybe using Observable class for each property?
@thinkofwhy
@thinkofwhy 5 лет назад
public delegate void PropertyChangeHandler(); public event PropertyChangeHandler OnNameChangedEvent = delegate { }; public event PropertyChangeHandler OnLevelChanged = delegate { }; public event PropertyChangeHandler OnGoldChanged= delegate { }; public void RegisterOnNameChangedHandler(PropertyChangeHandler handler) { OnNameChangedEvent += handler;} ...
@onurtnrkl
@onurtnrkl 5 лет назад
I asked that "How can we implement abstract classes or interfaces?". I mean, abstract Subject implementation. By the way I dont like event callbacks, Interfaces 2.5x faster than events.
@wokarol
@wokarol 5 лет назад
That's the point where using event would be a lot better. Maybe doing enum of event types would be good? Then AchievementSystem would do something like if(eventType == EventsType.HealthChange) { ... doing something with the value ... }
@STARasGAMES
@STARasGAMES 5 лет назад
The only way is to split things in several MonoBehaviours that derives from Subject. So there would be PlayerName.cs, PlayerLevel.cs, PlayerGold.cs. And place them on player GameObject. Composition! XD I`m also dont like c# events, but not because of performance. You can't serialize c# events, also no way to access listeners and debug things. I think the best way to do events in unity is ScriptableObject's Events. The 'must have' video: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-raQ3iHhE_Kk.html (27:33)
@onurtnrkl
@onurtnrkl 5 лет назад
@@STARasGAMES I already thought about that but I am finding better way, thanks any way :)
@nartousan3866
@nartousan3866 4 года назад
hello i have this error couldn t fix it Assets\scripts ew\PointOfInterest.cs(10,20): warning CS0649: Field 'PointOfInterest.poiName' is never assigned to, and will always have its default value null
@HAWXLEADER
@HAWXLEADER 5 лет назад
How is this any different than just doing AchievementSystem.instance.UnlockAchievment(poiName) using a Singleton?
@gamerholic3214
@gamerholic3214 4 года назад
HAWXLEADER with a singleton pattern, while you have global access to the singleton instance in any class, you have to directly call an object method. it’s like a 1 to 1 interaction. The object is not listening to a signal as you called the method directly. With the other observer pattern, you fire a notification (signal) and any listeners will respond to the signal. So you can have day 10+ objects listening to the same signal. When the signal fires all 10 objects will get notify and do their thing.
@janosdomboroczki8456
@janosdomboroczki8456 5 лет назад
Why is it a bad practice to inherit from that abstract class this case and generally? You can have static events in the abstract classes or plain classes as well.
@Aristaeus89
@Aristaeus89 5 лет назад
It is limiting. If you use a base class to subscribe to subjects, then it becomes difficult to inherit from other things. Say if you had a base class for Spells, but you also have a Fireball that should also be an observer. If both Spell and Observer inherit from Monobehaviour, you simply can't inherit from both in C#. Multiple inheritance comes with several issues and you might not want to have your systems be made in a way that makes these things occur.
@rockname
@rockname 5 лет назад
What are the benefits of this pattern instead of delegate and events?
@Unity3dCollege
@Unity3dCollege 5 лет назад
Delegate & events are essentially a c# implementation of that observer pattern functionality, wrapping up a lot of the underlying code :)
@The28studio
@The28studio 5 лет назад
I use this a lot too , but i use Unity builtin events
@wokarol
@wokarol 5 лет назад
What do you mean by Unity built-in events? UnityEvent?
@makulVR
@makulVR 3 года назад
why not using events?
@devolli3401
@devolli3401 2 года назад
Events in super short: When this event happens, do that event.
@OtakuDYT
@OtakuDYT 5 лет назад
If those events weren't static I guess the next best thing would be to make the achievement system static and have them register themselves? If neither are static then find is used?
@ZoidbergForPresident
@ZoidbergForPresident 5 лет назад
In the same book this video is based on, the author (and its sources) advises to not use singletons too often...
@OtakuDYT
@OtakuDYT 5 лет назад
So maybe we can finally get to the bottom of this, are singletons used in game programming these days or not? So many ppl have varied opinions on this it's difficult to get a straight answer.
@Unity3dCollege
@Unity3dCollege 5 лет назад
Generally it wouldn't use a find, there'd be a singleton or some other way to inject to object. Much of the time though, the things observing something are the same things that create them, so I often find myself registering events right after creating the new object. On singletons... there are drawbacks & it's very easy to fuck them up and make your project a mess... but they're used almost everywhere, and using them carefully can be completely fine IMO. (i've been back and forth on this a lot over the years lol)
@plunntic
@plunntic 3 года назад
@@OtakuDYT There's nothing wrong with using singletons per se. It's a simple pattern and it works. But as your project grows they may fuck you up. Say, you have this achievement system as a singleton, everything's fine, you're happy, and now 2 years down the road you decide that you want to have a local multiplayer (split screen) in your game where both players are logged in and both can unlock theirs achievements (don't know if anybody actually would want that, but that's just an example). So, now you need to have two achievement systems, right? One instance for every player. But it's a singleton, so you can't. And so the journey begins. You make it a not-singleton, just plain old instance. But you still have AchievementSystem.GetInstance() all over the place. So you have to get rid of that. And now what? Well now you have to provide the instance of achievement system to every other object instance that depends on it. Not an easy task when you have a lot of code structured around the assumption that everything is a singleton, with many layers of abstractions. It gets even harder because now you have two instances of the system, and you need to somewhere / somehow decide which instance of the achievement system to pass to which game objects. It probably would be better to just leave the system as a singleton, and make it support any number of players, and pass the player that unlocked the achievement as an argument when calling the system. And in this specific case this may be a good enough solution. But in other situation may not. Also, singletons are not great when it comes to writing tests - which you should if you're making anything more sophisticated than a pong - because you can't see (from the outside of the class) that it's using some singletons, and even if you know it, it is still hard to mock them. Sure, you can always do some monkey patching magic or what not. But at this point it is just more hassle than it's worth, i'd say.
@OtakuDYT
@OtakuDYT 3 года назад
@@plunntic Thanks for that, yeah I'm currently busy trying to use things like scriptable object events to trigger things rather than direct system connections. Probably going to be issues with that down the line too but all I can do is improve as I go as necessary.
@gazoonman
@gazoonman 4 года назад
Jason please share the code, maybe on your repo?
@ardrion5162
@ardrion5162 4 года назад
Wow, that pattern using events got me really confused. Mainly because it mixes static events and non-static private functions of an object. (I'm not a C# dev so this whole event thing is very new to me)
@NilsMoller
@NilsMoller 2 года назад
I do this with unity events, but I've recently been told C# events are better. Why is that?
@bobmcbob4399
@bobmcbob4399 2 года назад
C# events are great in non gaming apps. In gaming apps, you don't want GC allocations and events/Action/delegate will add this behind the scenes giving the GC a random chance to run during gameplay and introducing micro pausing in your main thread which is judder, affecting the smooth FPS you desire.
@Gnerlich
@Gnerlich 3 года назад
hey nice boi
@mchajakanhna
@mchajakanhna 5 лет назад
this video is like chinese to me, I tried to stay focused watching from the begenning to the end. maybe I'll understand when my beard turn grey
@LanPodder
@LanPodder 4 года назад
Have you worked with javascript? Because events are used a lot there aswell and i found that knowing about those helps with understanding this pattern
@Kalahee
@Kalahee 3 года назад
5:06 is what should be immediately taught by UI tutorials... I'm getting exhausted by all the absolute beginner tutorials that are actually teaching bad programming hygiene. Beginners end up making a huge mess, spaghetti code, and just drop it.
@Sodomantis
@Sodomantis 5 лет назад
Eye nuke
@Caden_Burleson
@Caden_Burleson 2 года назад
@4:33 "But, just to keep it simple, as my not perfect example", I think you should actually use a real world use case next time. Your videos always show up first when I'm looking for a tutorial, but I don't always watch them, because of this exact reason. They tend to be way too long and don't have very good examples. Just a tip for your next video. Thanks!
@humadi2001
@humadi2001 2 года назад
Bottom line 14:06 lol
@ggjosh3296
@ggjosh3296 5 лет назад
Insert cliche "First" comment here. ;)
@ZoidbergForPresident
@ZoidbergForPresident 5 лет назад
"cliché"
@midnightoilgames9796
@midnightoilgames9796 5 лет назад
A lot of bad practices in here just to show off one good one. Maybe make the videos a bit longer so you can have good practice code all around
@alexaba8714
@alexaba8714 5 лет назад
Hey guys. I need your help. I have an app(it such as book). And I need to store text from this book on the server and download it later from the server. What is the best way to store this text. To save style, color font size and so on.
Далее
The 6 Design Patterns game devs need?
24:20
Просмотров 363 тыс.
Watch This Before Working on a Big Game in Unity
18:44
Просмотров 293 тыс.
Amazing weight loss transformation !! 😱😱
00:24
Unity3D GameDev Interview Questions
34:47
Просмотров 52 тыс.
Clean Code using the Strategy Pattern
12:34
Просмотров 12 тыс.
Code Smells - 'Switches' in Unity3d / C# Architecture
25:21
How to Program in Unity: Command Pattern Explained
22:37
Rethink Everything with Scriptable Object VARIABLES
15:28
Unity DOTS vs Assembly Benchmark - Which is fastest?
30:34
Заячий Стон - Рот пятничный
0:55
Да блин 😀
0:19
Просмотров 1,4 млн