This pretty much aligns with what I said in the survey minus the system part, however I did have to stretch a little on what I believe system should mean because I myself never used System when naming classes, so you've got a point there. Is it possible to view the results of the survey? I'm just curious to see what other people thought, same as you were :)
Agreed. Been studying games programming for the past 5 years (3 in uni, 2 in college) and general programming (computer science, 2 years in another college). I was taught a lot about high level architecture and concepts in the CS course (first of the three) but almost nothing in the next 5 years of actual GAMES programming. Sure we all know how to do all kinds of games-related coding now but I found a lot of my peers can barely understand the terminology without having to go into insanely basic details to explain it. A lot of their code works fine but could be considerably more efficient if they just knew these sorts of high-level concepts.
At first look of this video I noticed that most part of the images and videos distract me from the topic. Except code pictures, this makes me concentrate more on the coding than on the video games)) Now, looking on the second time I see that all this backgrounds make sense =) will prefer static pictures on BKG than dynamic and may be more pictures of code (you know, even well-known built-in unity and assets from unity technology). However, overwatch clip was a good demonstration of uselessness of GameManager and it was in right spot and don't distract me... Hope this feedback will be useful for you ) Love your videos )
The effects are quite nice in helping maintain attention, but not entirely necessary. I know for my on my channel I find editing with after effects or any other similar program to be very time consuming, and I get really burnt out on it. My only advice would be to make sure that adding in these extra effects doesn't take up too much of your time, thus, reducing the time you have to create the quality content you produce.
Hi Jason - it would be really useful and informative if we could watch you set up a very simple game that uses Managers, controllers and systems so we can see exactly how you lay them it out in the project view and how you would use each of them in the game. Great verbal explanation btw, but would love to watch you implement them in real time. Cheers! :D
I didn't realize that I needed a game manager until I realized I that I needed to relate scripts in my project and the most convinient way of doing it I'd to tie most of the same type of info into a manager. Controllers are great for groups. Managers are good for flow.
I believe what everything I've answered in your survey reflected on this video. I really thought we'll have differing thoughts about this topic. Awesome. :D
Great approach! I usually use Managers in multiplayer games where there is a lot of local interaction with the server / client and the UI. Systems use a lot when I create Editor Tools like terrain system.
Thanks for this. I was using the model-view-controller lingo, but will change. Good to know the convention for classic unity is manager/controller. For ECS, I guess you just have manager entities with their components and systems.
Personnaly I completely forbid myself to use manager and controller keyword, to force myself into having more precise and accurate description of the goal of each class. This prevent classes to become ubber managers, and keep everything SOLID ;) (If someone disagree, I would like to discuss this :D as it is a really interesting topic )
Interesting discussion of systems. In my field of work, I'm not a game dev, a system is defined as encompassing combinations of technology and people in the context of natural, social, business, public or political environments, created, used and sustained for an identified purpose.
I love this video, and I am a huge fan of the channel! I've always been interested in game dev cause I am a freak for design patterns, and I love videogames. That being said, I am extremely new to unity, and I am trying to create a weapon manager. It would be awesome if you made a video to show some basics of implementing controllers, and managers in shooters or anything of the sort. You might already haver a video out there that covers these, if so I would love to be pointed to it! Thanks for all you do, keep it up!
Really enjoying these videos. Coming into Unity I have been trying to find a balance between following Unity's lead and buying into its design patterns, but also finding this can quickly get out of control. Do you have anything on data driven design? I feel like anytime I'm mixing state with behaviour is dodgy. For something like a Player, I'm thinking have all the seperate controllers (like you mentioned, navigation, animation) attached to the game object and use the Player class for state (and where you can get references to the controllers).
I guess it can get as complicated or as simple as you want it to be. I guess it depends on the project scope. I usually work on small to medium projects, so I tend to not over-complicate things, I feel like after a certain point you end up making the iteration process slower. And since I'm the only one coding I don't want to use too much time over-engineering systems.
I want to use composition for my game objects... If I have understood I should use a Input Manager that tell to an Attack Controller script (attached to my player game object)(that is useful for doing something, like a control of mana before casting...) to use the function called "Cast Spell" in the script that "derives" from interface ISpell?
First half is well understood, the interface part might be off. If you have a system where all playable objects have a spell then yes ISpell could be useful, but if you want to have somethings have spells and others maybe attack, drink, throw then you should abstract more or you will dig yourself into a switch statement hell. IUsableObject could have Use(this, target) as a method. Then you could just focus on the behavior of the objects separately. Interfaces are for deriving behaviors, not functionality. The class that is attached to the interface is the functionality/structure.
If we have no "gameManager" per se how should we handle game states for example? Where do you usually handle pausing the game for example, that most other managers should probably know about? What is the best practice for that kind of situation where we need globally accessible variables?
Forgot to add this: Great video :D It matches my answers pretty well which feels good to know :D Also I wrote a thing about Repositories. How do you feel about Repository classes that are only there to contain data (no business code) that is used by the managers?
I know about singletons. It's not the actual coding I'm interested in, but the idea of where to store such Global Game values other than in a Game Manager script?
Your videos are so helpful and effective. I wish you would do more. Can someone recommend me other videos / TH-camr, which offer just as much information content? I would like to learn in the most effective way with little time - would be nice if someone could give me some tips :) ( like SOLID principles)
Sometimes, I create something like TimeManager but it does not fit into the definitions presented here (which I really like). What naming would you use for a class that handles time management?
Side effect of my noob editing skills :) Normally if I mess up I just restart, this time I thought I could edit out mistakes lol :) (also a few times where I completely failed at saying words :)
No, I think uncle bob defines better what is a controller and a manager making define boundaries. Jason pleas can you expand this concept for unity developers inside unity components? Please read or look old bob concepts first. And make for us beginners making complex systems interacting, a hierarchy naming example structure. Thx a lot for your videos. Ps: armada?
From my understanding of the 2 terms, no, they aren't the same, though there are some overlaps. In an MVC paradigm, a "controller" is the part of the system responsible for managing communication between the view (what the user sees) and the model (the underlying data relationships). The term 'controller' as used in this video seems to be related to the concept of delegation of responsibilities. So, rather than having a single God class that does everything, you break it out into several controllers, each with distinct (as much as possible) responsibilities. So, if we take the example of a player character in an action game, you might have a Movement controller, Health controller, Weapon controller, Animation controller, etc. They would be all linked via some overarching class, eg "Player", that coordinates information between the different controllers, where necessary.
@@JordaanM Thanks for the clarification on this one. Can you tell me please, does that overarching class sit on a GameObject as well; alongside these controllers? So, let's say I have a Board prefab with Balls prefabs and I have a SpawnController and MoveController attached to that Board prefab. Should I call that overarching class as Board and plug it in? Also, should I access controllers by GetComponent or should I have a serialized field to hold it so that there is a guarantee that this object exist? Thanks in advance
ECS is only useful if you have a game that relies on a lot of data, for example a game like SimCity or any other building game. If you are making an MMO or any other dynamic game, it's better to use GameObject. Also the ECS that Unity implemented is bad, it will probably take them years to make it good for production.
Haha.. I just don't have enough time at the moment, I did my own implementation of ECS awhile ago. The Unity team was in my house the other day and we talked about ECS, they agreed most of the games won't even benefit from it, but you can do your own research.
Like ( done ), Sub ( Already Done! ), Here's a request! How you should Architect your project ? According to small scale and according to medium scale projects and what are the best general practices? Thanks.
Anyone else finding this video hard to watch? He keeps talking about managers, but keeps showing code for a controller, and video text that says controllers.
It does not pay to consistinly misuse buzzwords. System? State Machine? Index... if you are using these words right you are the only person. Unless its a internal class I would avoid them in your code at all costs
I love Unity, but you know two things that really still bothers me in Unity in 2018? 1. We still can't rebind input on runtime. Yes, you can write your own input manager and there is an open-source one on github that is pretty good. But still remaping input in runtime it's basic, like 1-on-1 making games for PC. 2. The generated mipmaps creates seams on the textures. Very annoying, another basic thing you would expect a 3d engine to do doesn't work very well in Unity.
This pretty much aligns with what I said in the survey minus the system part, however I did have to stretch a little on what I believe system should mean because I myself never used System when naming classes, so you've got a point there.
Is it possible to view the results of the survey? I'm just curious to see what other people thought, same as you were :)
Here they are :) docs.google.com/forms/d/e/1FAIpQLSdd3z5gkh9Ugit_L6b-o2WP9l7jSgTpKqynjO28a-CXQH8Eag/viewanalytics
Thanks!
Please do more of this high level architecture concepts videos. That's an area that I find very lacking in content in the Unity3D community!
Agreed. Been studying games programming for the past 5 years (3 in uni, 2 in college) and general programming (computer science, 2 years in another college).
I was taught a lot about high level architecture and concepts in the CS course (first of the three) but almost nothing in the next 5 years of actual GAMES programming. Sure we all know how to do all kinds of games-related coding now but I found a lot of my peers can barely understand the terminology without having to go into insanely basic details to explain it. A lot of their code works fine but could be considerably more efficient if they just knew these sorts of high-level concepts.
yess
Agreed!
Just a warning, I tried using aftereffects to do some editing... emphasis on tried :) Definitely need a lot more practice :)
At first look of this video I noticed that most part of the images and videos distract me from the topic. Except code pictures, this makes me concentrate more on the coding than on the video games)) Now, looking on the second time I see that all this backgrounds make sense =) will prefer static pictures on BKG than dynamic and may be more pictures of code (you know, even well-known built-in unity and assets from unity technology). However, overwatch clip was a good demonstration of uselessness of GameManager and it was in right spot and don't distract me... Hope this feedback will be useful for you ) Love your videos )
The effects are quite nice in helping maintain attention, but not entirely necessary. I know for my on my channel I find editing with after effects or any other similar program to be very time consuming, and I get really burnt out on it. My only advice would be to make sure that adding in these extra effects doesn't take up too much of your time, thus, reducing the time you have to create the quality content you produce.
Hi Jason - it would be really useful and informative if we could watch you set up a very simple game that uses Managers, controllers and systems so we can see exactly how you lay them it out in the project view and how you would use each of them in the game. Great verbal explanation btw, but would love to watch you implement them in real time. Cheers! :D
I didn't realize that I needed a game manager until I realized I that I needed to relate scripts in my project and the most convinient way of doing it I'd to tie most of the same type of info into a manager. Controllers are great for groups. Managers are good for flow.
Thank you, Dan Harmon
Finally, the video I was looking for. Thank you so much!
I believe what everything I've answered in your survey reflected on this video. I really thought we'll have differing thoughts about this topic. Awesome. :D
Great approach! I usually use Managers in multiplayer games where there is a lot of local interaction with the server / client and the UI. Systems use a lot when I create Editor Tools like terrain system.
Thanks for this.
I was using the model-view-controller lingo, but will change.
Good to know the convention for classic unity is manager/controller.
For ECS, I guess you just have manager entities with their components and systems.
Personnaly I completely forbid myself to use manager and controller keyword, to force myself into having more precise and accurate description of the goal of each class. This prevent classes to become ubber managers, and keep everything SOLID ;)
(If someone disagree, I would like to discuss this :D as it is a really interesting topic )
Thanks man. This helped me. Made me realize I'm doing good work too.
Have a nice day! :)
Interesting discussion of systems. In my field of work, I'm not a game dev, a system is defined as encompassing combinations of technology and people in the context of natural, social, business, public or political environments, created, used and sustained for an identified purpose.
Thumbs up for the audio quality 👌
I usually name managers as containers, in case I need to separate the search logic, I put it in separate class named provider or data provider.
Thank you so much! Very helpful!
I love this video, and I am a huge fan of the channel! I've always been interested in game dev cause I am a freak for design patterns, and I love videogames. That being said, I am extremely new to unity, and I am trying to create a weapon manager. It would be awesome if you made a video to show some basics of implementing controllers, and managers in shooters or anything of the sort. You might already haver a video out there that covers these, if so I would love to be pointed to it! Thanks for all you do, keep it up!
Perfect. Big thanks.
Really great. Thanks Jason! :D
Very interesting, thanks☺
Great video again :)
4:00 - 4:39 idk why but I seriously just died laughing. he's so right, it's hysterical.
You worked on WoW, didnt you? I am so glad i found your tutorials =D
Really enjoying these videos. Coming into Unity I have been trying to find a balance between following Unity's lead and buying into its design patterns, but also finding this can quickly get out of control. Do you have anything on data driven design? I feel like anytime I'm mixing state with behaviour is dodgy. For something like a Player, I'm thinking have all the seperate controllers (like you mentioned, navigation, animation) attached to the game object and use the Player class for state (and where you can get references to the controllers).
It's funny how similar the unwritten conventions are for the usage of these names.
Thx Jason!! I always am confused with these concepts. Im a begginer, and don´t know how to start.
I guess it can get as complicated or as simple as you want it to be. I guess it depends on the project scope. I usually work on small to medium projects, so I tend to not over-complicate things, I feel like after a certain point you end up making the iteration process slower. And since I'm the only one coding I don't want to use too much time over-engineering systems.
I want to use composition for my game objects... If I have understood I should use a Input Manager that tell to an Attack Controller script (attached to my player game object)(that is useful for doing something, like a control of mana before casting...) to use the function called "Cast Spell" in the script that "derives" from interface ISpell?
First half is well understood, the interface part might be off. If you have a system where all playable objects have a spell then yes ISpell could be useful, but if you want to have somethings have spells and others maybe attack, drink, throw then you should abstract more or you will dig yourself into a switch statement hell.
IUsableObject could have Use(this, target) as a method. Then you could just focus on the behavior of the objects separately. Interfaces are for deriving behaviors, not functionality. The class that is attached to the interface is the functionality/structure.
@@aronlinde1723 OK, thanks.. But what do you think about the ECS? It will destroy all these things :(
If we have no "gameManager" per se how should we handle game states for example? Where do you usually handle pausing the game for example, that most other managers should probably know about? What is the best practice for that kind of situation where we need globally accessible variables?
Forgot to add this: Great video :D It matches my answers pretty well which feels good to know :D Also I wrote a thing about Repositories. How do you feel about Repository classes that are only there to contain data (no business code) that is used by the managers?
I use singletons....I think he has other videos on what you're asking
I know about singletons. It's not the actual coding I'm interested in, but the idea of where to store such Global Game values other than in a Game Manager script?
BenJoe72 you could use a state machine to handle pausing the game
Your videos are so helpful and effective. I wish you would do more. Can someone recommend me other videos / TH-camr, which offer just as much information content? I would like to learn in the most effective way with little time - would be nice if someone could give me some tips :) ( like SOLID principles)
Fluffy Tiger personally...I find his methods more applicable to real world projects, the others are generally just for fun projects
Sometimes, I create something like TimeManager but it does not fit into the definitions presented here (which I really like). What naming would you use for a class that handles time management?
That bame is good, I used the same name haha, for slow motion.. pause game.. resume..
TimeFlowManager :)
I know it's unrelated, but what's the name of the game in the video intro?
1:47 i thought you'r going to vomit... :D
Side effect of my noob editing skills :) Normally if I mess up I just restart, this time I thought I could edit out mistakes lol :) (also a few times where I completely failed at saying words :)
lolzz .. I was just kidding .. these things don't matter ithink .. you are legend
What game is that at the begining of the video?
No, I think uncle bob defines better what is a controller and a manager making define boundaries. Jason pleas can you expand this concept for unity developers inside unity components? Please read or look old bob concepts first. And make for us beginners making complex systems interacting, a hierarchy naming example structure. Thx a lot for your videos. Ps: armada?
I used 1 script for 1 eg. Player / enemy I guess it's very bad 🤔😁
Is "Controller" here similar to the meaning of the word in other patterns (e.g. MVC)?
From my understanding of the 2 terms, no, they aren't the same, though there are some overlaps. In an MVC paradigm, a "controller" is the part of the system responsible for managing communication between the view (what the user sees) and the model (the underlying data relationships).
The term 'controller' as used in this video seems to be related to the concept of delegation of responsibilities. So, rather than having a single God class that does everything, you break it out into several controllers, each with distinct (as much as possible) responsibilities. So, if we take the example of a player character in an action game, you might have a Movement controller, Health controller, Weapon controller, Animation controller, etc. They would be all linked via some overarching class, eg "Player", that coordinates information between the different controllers, where necessary.
@@JordaanM Thanks for the clarification on this one. Can you tell me please, does that overarching class sit on a GameObject as well; alongside these controllers? So, let's say I have a Board prefab with Balls prefabs and I have a SpawnController and MoveController attached to that Board prefab. Should I call that overarching class as Board and plug it in? Also, should I access controllers by GetComponent or should I have a serialized field to hold it so that there is a guarantee that this object exist? Thanks in advance
@@tomasbaranauskas8142 I don't think there's a single correct answer, it varies based on your needs / situation.
Hey, cool, and thank you, for realz hehe cheers
Lol funny thumbnail
ECS is only useful if you have a game that relies on a lot of data, for example a game like SimCity or any other building game. If you are making an MMO or any other dynamic game, it's better to use GameObject. Also the ECS that Unity implemented is bad, it will probably take them years to make it good for production.
It isn't bad, that's how it was designed
I don't like the way they have designed it, but anyways most of the games won't benefit from using ECS except building games.
Haha.. I just don't have enough time at the moment, I did my own implementation of ECS awhile ago. The Unity team was in my house the other day and we talked about ECS, they agreed most of the games won't even benefit from it, but you can do your own research.
Like ( done ), Sub ( Already Done! ), Here's a request! How you should Architect your project ? According to small scale and according to medium scale projects and what are the best general practices? Thanks.
I didn't get it.. I don't if it's the way you explained or what, i didn't get it. And apparently, this is the only video on this subject
Anyone else finding this video hard to watch? He keeps talking about managers, but keeps showing code for a controller, and video text that says controllers.
Noobs take note!! I know 'I' am!
It does not pay to consistinly misuse buzzwords. System? State Machine? Index... if you are using these words right you are the only person. Unless its a internal class I would avoid them in your code at all costs
I love Unity, but you know two things that really still bothers me in Unity in 2018? 1. We still can't rebind input on runtime. Yes, you can write your own input manager and there is an open-source one on github that is pretty good. But still remaping input in runtime it's basic, like 1-on-1 making games for PC. 2. The generated mipmaps creates seams on the textures. Very annoying, another basic thing you would expect a 3d engine to do doesn't work very well in Unity.
That female referee derailed me big time : -)
I dont find it productive to add garbage words to my class names.