🌍 Get the Game Courses Bundle 3x1! game.courses/code-monkey-bundle/ (Includes Steam Keys for my games as a FREE bonus!) 💬 Factory Automation Game! I've been working on this for a month, did you join me on the Livestream? Make sure you don't miss whatever mini-game I work on next, hit the bell icon! 👍 You can play the game on the Steam App or Download the Project Files, hope you like it! 🌐 Have you found the videos Helpful and Valuable? ❤️ Get my Courses unitycodemonkey.com/courses or my Steam Games 🎮 unitycodemonkey.com/gamebundle
This game reminds me of the old Dune game. it would have been interesting to add the hidden resources and use leaflets to find enemies to destroy them and you to defend them. My opinion is that you can use this idea to simulate a computer - it could be used in the learning process for schoolchildren and you could put it online. In the end, the work done and the number of hours depends a lot on what you have.
Do you have a tutorial of how to make this game from scratch? I would love to take it. Also, in the background you show a top down game on Steam that looks really good. It’s the game in the background at 0:37. Do you have a tutorial of how to make that from scratch? I would love to take both the factory tutorial and the tutorial of that game in Steam. Thanks!
@@gfujigo Most of the videos on the Grid system playlist are step by step tutorials which is what this game is based on ru-vid.com/group/PLzDRvYVwl53uhO8yhqxcyjDImRjO9W722 That's the Wash your Hands game ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-q9pe-wH7eZ8.html
There's no game that i want to play, it basic on factoric but the game purpose isn't my thought because it not enough like a chip layout generation program, that can held out put lot of different size of retangle in to a one small square with high density, that can make a little change and regenrate, that to let player like the chip designer, more density and look awesome and give a written line to add some parts more without redo move parts all times hand by hand
True, super helpful stuff. I'm sure he's got them stored locally too, so it won't lost forever. (I made that mistake with some stuff published to a website, they had exclusive rights for publishing, so I didn't have it hosted on my own site, and it was only stored through their editor. RIP).
Me: Struggling for hours to instantiate an object and populate one of it's variables Code Monkey: So I'll just make a 3D Factorio template in a couple of days...
@@CodeMonkeyUnity and constant practise. I'm finding myself saying "I knew how to do this 4 years ago" pretty often after taking a bit of a break from gamedev. Luckily your videos are here to my rescue.
@@CodeMonkeyUnity I absolutely won't!! Watching your videos pushes me forward and thanks to people like you, today I know a lot more than I did a month ago.
Survivor Squad, Game Corp DX, Blueprint Tycoon, Ninja Tycoon, and Battle Royale Tycoon. I bought these 5 of your games before going to University for Computer Science. Now that I'm finishing my degree and making my foray into Game Development, you've been the most helpful person on the planet. Thank you, for your great games, and your incredible teaching!
I've been making a factory game like this and making devlogs. I'm pretty sure I'm well over 20 hours by now... It's super inspiring watching you work though :)
The way you explain how you made your game can basically amount for everything I've learned in unity for 2 years. Including stuff I haven't learned yet.
It's a great overview of how Factorio might be working, or maybe how to do something like that in a different genre (RPG game with some small homebase), but I still want to point out that the WHOLE selling point of Factorio is its scale.
When I started watching this I already had the impression "this guy really knows what he's doing", then you mentioned "...in my game Blueprint Tycoon" and I went "ah, now I know why, he already made a well done game, no wonder then" xD
I think some people would like to watch full uncut (even if not commented) project creation, like this factory game project. At least I would be interested :D
Wait, Blueprint Tycoon was one of yours? It's been a while since I've got and played it, long before I got to know your RU-vid channel, but I remember having a lot of fun playing it. Nice.
Wow this is fantastic! I have recently discovered ypur channel and i even have tried making my own game, but it is much harder than i have expected. I know C# quite well but even with that i feel lack in some areas. What are some good videos of yours to start understanding how to write code for unity and how to solve common problems? Thank you for your work, you are a true legend!
For the absolute basics you can start here ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-E6A4WvsDeLE.html Then a refresher on C# basics here ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-IFayQioG71A.html After that just browse for a simple video that interests you and try to follow that, maybe the video on Flappy Bird which takes the game from start to finish. Best of luck!
OH! Somehow until now I've been completely oblivious to the fact that Blueprint Tycoon is by you and I kept wondering why I occasionally get your vids recommended.
12:50 🥺 You're breaking my heart 💔 I think this is an excellent series! It would be interesting to see "where are they now" for these games after your own videos.
I remember running into a similar problem to yours while trying to recreate baba is you's block push system, and I did it in a different manner to you, but this seems pretty smart :) (btw, it'd be cool if you recreated those sorts of systems so that it's scalable and cool, maybe for a series or something)
@@foamtoaster9742 I used a recursive function that checked if the object next to itself had a Push script attached, then ran the function on that. It checked every object in the line and then executed if it found nothing. I think mine is better for that situation and his is better for this one tho :)
Always when you upload a new video like this when you make a game I always try to make it by myself before watching the video and then watch your video and compare them and I always find things what you did in a much optimized and simpler way than me and I learnt a lot of things from you like this. Thanks for the awesome videos, they are really helpful. Sorry for grammar mistakes I'm hungarian and I'm just learning english. And now if I'm think about it, this is a nice way to learn english too because you are speak english.
Your English is great! Yup watching videos and writing comments is an excellent way to learn, for me I learned English pretty much by watching Cartoon Network and writing code!
This is a great video. I am playing a bit with the code and I can see that the safety break to 1000 iterations, limits the size of how big the belt system can get over time. I wonder if there is a better way to check for loops in the belts (which is not wrong in principle) without incurring in an actual infinite loop in the code. Do you have any suggestions on this matter?
I'm so glad you made this video, I'm not really playing these type of games, but one meme started going around in a certain community and I want to join and making a meme factory game will be perfect. Why factory game? Because the meme is one gif that's evolving all the time, and someone made it so you can spam it on discord and it looks like a vertical conveyor belt, is it a stupid idea? Yes, but I can try this genre at least
for proper FIFO-traffic-jams, you split belts into [lines] (strings of belts/inserters, without merging/splitting branches). your runtime code only deals in lines, lists of the same moving items, these are belts (exclusive-)OR inserters of the same speed. Only your editor deals in elements of lines, that ultimately end up editing lines. A line ends where multiple things output to the same spot. A line ends, where 2 inserters grab from the same spot, OR where 1 inserter grabs from a belt. A line ends, when its string of linked belts/inserters loops back to itself. above 2 conditions may change with every placed/removed item. you may want to also artificially split lines geographically by world-chunks , so that every chunk of game world knows what likes it contains, and 1 line is fully contained in a chunk. this lets us modify and LOD lines faster. adding a bellt (or many items) may split a line in 2 lines. removing a belt may split a line in 2 lines. removing a bellt (or many items) may merge 2 lines into 1 line. (1 location changes, to only have 1 inoput, identical to its output) same for changing the speed of an item. each line starting point queues/priorizes items from its inputs. each line is a FIFO queue, simple to code. its output may be "full", which may push the voids to the inout of its queue, where they then may get filled. a "line is full" flag may also speed up code as a bounding condition.
this is cool, thanks for the write up. I was pondering how DSP did some of their processing. Apparently they do most of this in a compute shader which allows them to process whole planets of factories in real time. That seems doable. I stumbled when I imagined how they might accomplish sushi belts (belts with a mixed set of items). I was hoping the whole thing was compressible (IE I could process 10 ticks without processing 1 tick at a time) but the sushi belts pretty much squashed that thinking, I really couldn't come up with a solution that did not require every tick processing. But again if you're doing in a compute shader you have tons of computational room to do a huge amount of factories. This topic is so fascinating. If anyone has any online white papers on the subject or more discussion how to do this well I would love to see it.
i would like soo much to see a complete course, maybe on udemy, on a factory-like game like this, where to learn how to code complex conveyor belts systems!!
I'd love to do it but courses take a ton of time so not sure when. In the mean time you can download the project files and inspect the source code to see how everything works
This is amazing like always. It bet it feels just good to be able to create something that you visualize with skills you inherited over the years aka programming/game designing in this case and this result :D I have one question btw, I can some depth of field and blurry corners, what settings did you tweak in post processing to achieve it and that level of Polish at the end?
Yup being able to create any game genre I can think of is a very awesome thing! For the depth of field, it's just making it a small non-blurred section so it kind of gives it a tilt shift sort of look. You can download the project files to inspect the exact settings.
New Subscriber here. I love the look of this game and I would love to be able to make a game like this but my brain doesn't work like that. Thanks for showing us this game.
Holy shit. In this video you really sound like those vacuum salesmen, that come to your house. And he seems he wants to really sell you that extra insurance and that vacuum key accessory aswell.
@@CodeMonkeyUnity To elaborate: I've watched a lot of your videos, but in this one in particular you seem to mention the courses and all that stuff more frequently than usual. Not that i dislike the courses, especially since i also own a package with Jason in it and I can also really recommend him. I hope you are not taking it offensively, really like your videos and learned a lot of stuff from you aswell (Unity DOTS for example). Just wanted to mention it, and keep up the good work :D
@@Rushhourz0 Yeah no problem I'm not taking any offense, just confused. The video does feature a standard 60s sponsor spot, so the difference is that most of my videos don't have a sponsor spot and this one does.
im trying to make a factory game too expect there is a player that you can control and you have to use the materials to build defenses to defend yourself from the enemies
You would think a game can't make a performant factory game in unity, but Dyson Sphere Program exists. Fortresscraft Evolved also exists, but that game isn't as performant late game. It could be though if it did some multithreading though
This is awesome! How would you be able to make buildings cost a specific amount on place? Like a conveyor belt costs 5 money, whereas an assembler will cost 10
@@CodeMonkeyUnity How would this happen? Like, how would I reference the cost in the Scriptable Object within the Resource Manager, and make it subtract the money before spawning?
while watching this video, i thought of a game idea like factorio in which there is infinite progression with procedurally generated ore types/names, and compact machines within compact machines. hopefully nobody beats me to making this game a reality.
Hey Code Monkey, I really appreciate your videos and currently even going through your udemy tutorials. At this point I have a question... For some environments a hex-based approach is slightly better, because of having the same distance from mid to mid of a hex in all six directions. Can you perhaps take a vid with creating a hex-based grid system?
That is something I'd like to cover but don't know when, I'm pretty sure you can reuse the same underlying Grid System and just do some tricky math to find how a world position relates to a Hexagonal grid position.
Hey Code Monkey! How are you doing? Are you planning to create some content explaining how to implement the conveyour belt system used on this video?! Thank you!
Hey, as always amazing work! Can you tell me how to place the gold nodes (resources) in editor? In my game i would like to have a hidden resources on grid wchich will be loaded into game. Thanks in advance.
Saw your post that you were working on a factory game tutorial. I was waiting on a belt system with ecs or another solution of per node processing. Doesn't look like i'll find this here :/ If we look at Dyson Sphere program, the game's belt looks pretty optimized. I really wonder how they made it.
I was wondering how to achieve a smoother movement of the items on the belt. At the moment looks like they get pushed from one belt item to another instead. Any suggestion?
Thanks a ton! Any chance of a 2D version of the prototype? I found it very helpful having the 2D classes on the grid building system. Been working through trying to convert so I can keep plugging away at it if necessary. Just verifying I'm not wasting my time :)
You can definitely do that, I don't think any part of the logic even touches the meshes so just swapping the underlying grid should work with a few tweaks.
Couldn't you make a simple "bool stop = false" variable on every item on an item belt that switches to true whenever the item in front stops or there is no belt in front of it, instead of making that overly complicated path define, merge and split system? (Probably also more performant) Just a random thought. EDIT: After finishing the video, I think even better would be to not have the objects move at all by default. Instead, adjacent objects can request from another object to move to towards them. A belt would move the object behind it towards it with a priority of e.g. 1, while the assembler would move the item towards it with a priority of 10. That would remove the need for extractors/inserters. That would even allow extraction from building to storage, and every object could have its own speed. (This could also be combined with stop system from above).
That still has the same problem which depends on the order of your testing. If you test the second item, it wont move because of the one in front has an item, the items would only move if there's a gap between them. Again having the belt request an item still leads to the same problem on the order that you test. No matter what you do you need to know the order of the paths so you can ensure you move the items front to back. The issue is always with the order that you test.
Code Monkey Nope. Difficult to explain but it works. Have IsStopped function run on an item. It does not matter with which item you start. The IsStopped function calls the IsStopped function of the next item, which calls the same function of the next until either the next item equals the first item or there is no next item or the next item’s stop bool has been set to a value this turn. Then you can set the stop bool for all checked items to the same value.
This requires resetting the stop bool to default after every frame, but in the past couple weeks I’ve been doing that more and more for variables modified by script.
Making a similar game right now and is wondering which is a more effective design. Putting belt logic on belt or belt logic on item? I'm hoping to be able to extend it with multiple item per belt & multiple belt speed later
Couldnt you just do the belt system like this? test for item in belt ahead if no item, then move to that belt if there is item, check that belt to move
Not sure if it's asked but you skimmed over "drew some moving arrows for belts", how did you do that? It really looks like an arrow is spawned and travels along the belt. Well done!
The texture is just a single arrow pointing right on a dark grey background with the texture set to repeat. The "animation" is handled in the shader, just connecting the Time node to the Tilling and Offset node. All the belts use the same texture and shader at the same speed so it all connects perfectly
@@CodeMonkeyUnity I was thinking it was something along that line. Very well executed! Also love how you show how all your experience adds up as this is very much the case in all programming (as long as you keep learning and challenging yourself). It's so direct with your small game modules which gets that point across very effectively and visually!
I'm very interested in the belt system, I really haven't found a good belt system anywhere else, could you maybe give us a tutorial or the whole script? I'd really like to understand how it works
You can download the project files linked in the description but this belt system is not performant at all, it's extremely basic, for something performant you need a ton of clever tweaks and possibly smart usage of the Job System
If an item on a conveyor belt is an object and the conveyor is a series of objects then every item on the conveyor moves forward one conveyor object tile at a time regardless of N items sitting on M conveyor tiles if the conveyor system is a state machine or it the conveyor system is a single C# Object. What you described in your video where items get jammed is not the right approach and what I said is because you want everything to move on a conveyor belt at the same time as it does in the real world.
Is the conveyor belt class derived from monobehaviour? and are they directly attached to the object in the scene? The problem I always have is, that each object has its own script that’s constantly being updated which causes massive performance problems after 60-80 belts in the scene each updating an items position. I know it’s probably better to only call an update on an event like if an item appears on the belt or is moved to the next but, the only way I know how to check for those events are with collider or bounds which again is performance heavy at least on my pc. I’ve tried implementing a system in ecs but god that was a headache. I watched your section on the belt system and it’s perfect for what I’m trying to do, I’m just curious if the conveyor class is pure data or a mono behavior. Any help or thoughts would be awesome. Thanks
The Belt itself doesn't have an Update logic. The moving logic is on the Belt System which tells the belts to move whatever is on them and the Belt System itself only runs on the Time Tick System. So the belt logic updates 5 times per second, not every frame. The Time Tick system is super useful and something I've used in most of my games, I covered it in a video quite a while ago ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-NFvmfoRnarY.html
@@CodeMonkeyUnity Ah I get the drift now, thanks for that, completely changed my thought process on the system I have. I was researching other conveyor belt systems in other games and I read on the factorio forum that they use a chain system, like every belt is part of a chain that has a length. I've been trying to understand why they do that. I can see how having a chain with a series of positions makes it easier to determine the items path and directions on the belt but my question is does a chain really improve performance or not? I have been trying to keep things as simple as possible yet not to a point where I'm avoiding future problems. lol I know I ask allot of questions but I am trying to soak up as much knowledge about this subject as possible, especially from the person that who taught me how to code allot of things. Having another programmer to talk too helps me understand concepts and Theory's allot better.
@@chrisjulch561 Yes having everything organized into chains/paths and only doing heavy logic on the front is the way to go, it greatly improves performance since you don't need to worry about 90% of belts, just move them automatically.
Check if there's any shader errors, it should be all working with any URP version. Also keep in mind the assets I used in the video are 3rd party assets, I did not make them so I cannot distribute them so they are not included in the package.