I am always amazed by developers that get so far without learning how to use version control. I'd invest a few more hours into learning git again, it's a skill that pays off forever.
@aquau5777 ikr? The most difficult part about git is coordinating with a team to have a standarized pipeline and not to step into each other... which is one of the main problems that branches solve. But a single developer working on a single branch has to be the easiest and safest workflow one can achieve.
I have no idea how version control works either. I was in a group project. I uploaded a branch and it worked fine. I tried to update the branch and it didn't work. None of the new files were there, the branch was the same as it was before. Also, github won't accept files that are too big, or folders with too many files. I don't understand how I am supposed to back up my files if it won't let me upload them.
@@xei2694 In general when you have an error there is an error message, that should either help or be googlable. And for big files you need to set-up Git LFS (large file storage).
This for sure but also unity and git can have some weird issues if not configured correctly. From what I've seen you can replace the .meta files with .yaml files but that should only really be an issue if you have multiple devs. Also dealing with hitting the cap on LFS and having to pay I could see being a big reason for some developers to not actively use github specifically.
There is a "Localisation" Untiy Package that adds a scriptable object system to every text object automatically. You could use that and add a "language" called rich text. It basically makes a new instance of the component (in the editor, with a dropdown) to configure everything about it separately.
This is actually insanely relatable. I've been programming video games as a hobby for over 5 years now and the amount of times I've needed to scrap an entire section of code because of numerous issues is unbelievable. Whether it be programming errors, a conflict with other code, or an idea that just wasn't really that good, starting fresh was the simplest way to make progress.
@@BenBonkI actually did this once, but I later realized my old method that I was using the entire time only had one little issue that could very easily be fixed by literally just using a different function. Yeah, I felt stupid but I had succesfully made working minigames and all was taken care of. Nice
Just a quick side note that rich text is a term used to differentiate between regular raw strings and a post processed version that extracts tags like etc and converts them into styling options that only apply to parts of the text. That name is a fairly universal standard across all text editors, TextMeshPro included (unchecking the "rich text" check box in the extra options will turn off the tag parsing) I would also suggest writing a more generic version of the font switcher to support N number of fonts, which could allow you to add a dyslexia friendly font option without too much effort. It's by making these kinds of mistakes that we learn just how valuable version control and frequent backups are. Hopefully you can grow as a better dev from this !
I've heard of scriptable objects before and was wondering what is the benefit(s) of using it. Especially in this case. I know when you are making, for example, multiple items like swords that have the same stat types it's more efficient and simplified, but I don't see the point in this case. If you could help me get a grasp, it'd be much appreciated.
@@kaiden2348 I'm not exactly good myself but I'd put those values there because I think it's better practice than storing them in the start function. Also allows you to make spacing values for other fonts in the future. Although this method is kinda weird because tmp has an auto size feature turns out lol
The game's coming along really nicely and your video editing's getting really good to! Yep it can be pretty frustrating when you just can't get something working. But good luck on the rest of Slimekeep! 👍
This was very needed. Always thought the font was hard to read. I would suggest making it the base font if I’m being honest. It looks way better and it still makes sense with the game.
Yeah honestly I kinda thought that when working on this feature because I really like how the new one looks. Although at this point I might as well keep them both an option after going through all that work
All you needed to do, was friggin enable the multiply the text by 2, whenever the checkbox was ticked, otherwise multiply the text size by 1. Also, Do some research on mono-spaced fonts!
Thanks for sharing this journey! While I've been working on my first commercial game I also learned a few of these hard lessons where if I had simply just done it a better way first it would have saved me a ton of time later. But, that's all part of the game dev journey.. you don't know what you don't know. Cheers, and good luck!
Me and a friend who make games together also wanted to add a font switch, so it's admirable seeing how you did it with that "old" Unity version and with so many problems that kept appearing. Good job!
I love your honesty in this, it's admirable, and you keep the video entertaining and positive despite it. It's something that I think a lot of game dev youtubers miss out on sometimes; the fact that they're learning. It's not like they don't know or mention that fact, but I haven't seen many handle it as nicely as you have here.
Thank you, that means a lot and was definitely what I was aiming for in this video. Just wanted to show the “realities” of gamedev I guess, and keep myself honest on this devlog series.
If you ever want to try to use version control again, I use Git Kraken to get around a lot of the headaches that I had with Git Bash. Can't wait for the next devlog!
Nice job at the end man. Once I saw your "plan" at the beginning I was like "Oh no". But you managed at the end haha. I would have use events and something similar to what you did; once you tick the box, fire an event that all "TextHandlers" are subscribed to, then modify the text. You could even use 2 TMP objects and swap between them, but that's a bit inefficient. Anyway, you got it, that's the important part! Keep it up my man!
Please tell me that you find out Textmeshpro has an auto size option. I'm so worried watching this and seeing all the work you're doing, when theres a solution built into Unity!
It's so infuriating and funny at the same time when you work so hard to fix a bug that was fixable with something that was there in the engine by default, waiting to be enabled.
Yeah, the solution you settled on in the end is the right way to handle it (though you probably shouldn't duplicate the values across every text object). You can think of it like this: you have a limited number of ways in which you want to draw text. This number is far more limited than how often text occurs in your game. This means that it is not the responsibility of the text to know how it is drawn. The text object just takes the desired content and the desired presentation, and combines them. It shouldn't care about what the desired presentation is, only where it can find it. From there, you can point each piece of text to the object that provides that information. (You could even have multiple, and have some text point to one and some to another.) You can then make changes to that one object, and have all text that points to it automatically use the updated values when relevant. Because your text may be bound to the scene, but your presentation provider can live in the global scope, and is thus always active. So in the end, your presentation provider just sits there and does nothing but answer questions that your other objects ask it. Its role is not to make decisions, but to contain knowledge. And your text objects drop by to ask for that knowledge whenever they need to. Their role isn't to make decisions either. They only take the information and use it to render something to the screen. So wherever you're making a decision about presentation (probably in the settings menu), all you do is notify the presentation provider so that it updates what it knows about. The rest works itself out after that. I should note that I'm not super familiar with Unity though, so if anything here doesn't make sense in the context of Unity, just ignore what I'm saying. Certain tools have certain ways of handling things and it can be completely different from other tools. That can be a bit hard to get a grip on sometimes.
This is why I don't modify data that should be immutable. I remember doing something similar making a State machine for a character and changing the state every second (changing images, translating the sprite, changing images again, re-translate the sprite again). So one day I learn my lesson (the bad way) and I started making struct of parameters for each case. And making the system use one struct or another as needed. I also learn to use MVC patterns and things got easier. I think everyone goes through this pain once.
Wait, you’re calling the high-res font “rich text”? Is that not going to get confusing if you ever want to add actual rich text for things like italicizing words in text boxes?
Watching the video hurts me physically. There are so many ways to do this better. Something I thought of off the top of my head is give every text object a component which does something on awake. It adds the component reference to a dictionary along with a custom class. This custom class would just store the reference to the textmeshprougui, and a float for the original pixel size. Then when you want to change everything you can loop through everything in the dictionary, skipping nulls, and just set the fonts accordingly. Finally you just store the font and pixel size multiplier for the font in a globally accessible manner through a singleton or something and then go to any text component that we made earlier in the awake, check for those values and have it update itself accordingly after the default data was assigned in the dictionary.
I know literally nothing about game dev, but i am a designer with pretty severe dyslexia. Anecdotally I can say that readable fonts are one of the primary deciding accessibility features of I play a game. It's not just "high resolution". I always encourage excellent type design in game, especially using fonts designed for legibility.
5:21 Bro please, start using version control. Git and svn are so easy to set. In case of FindObjectsOfTypeAll, save [yes, save], quit unity and do a reset or revert on your working directory. And be sure to commit or push when things are working. These systems provide you vary nice backup strategy and make it possible to work in a team :)
7:36 - sometimes deleting huge code only to rewrite it to do better job isn't nessesarily the same as "killing your darlings". treat it as hair trimming :D instead.
Add chests to the game and ruins that you could go in the basement that either has a puzzle or has a mini boss or many enemies to fight and at the end you could get an extra health thing (raising your max health, or giving you temporary health), more boosts, or a unique item or weapon. You could make it so that the slimes could randomly try to attack you whenever you are in a room with slimes or make rooms that have no enemies or anything
I have to say: making and uploading this video is pretty brave but important. You may get ridiculed by a lot of people for this, but this may bring people to learn some sort of version control without them losing a bunch of progress and learning the hard way. Great video!
we all make this mistake at least once. a good dev makes the mistake only once or sees it coming and never makes it at all, and a bad dev repeats the mistake over and over.
It feels like you really went with the hard approach. While I don't know pretty much anything about unity, I'm pretty sure that the font settings should be a structure with {font, defaultFontSize, defaultPadding} and not just font family. For example: Your base font looks like this: "My font", 10 pt, 0 letter padding. You add a new font which has the same parameters and everything is off scale. Okay how do you fix this? You just fine tweak the base default size of the font so instead of it having an associated default size of 10 pt it would have the pt size of lets say 2.5 and letter padding of -1. And final result is "New font", 2.5 pt, -1 letter padding. Well, probably it should've been easier that way. The visual results though might have not been that pleasing compared to manual work. But this system is definetely is easily expandable compared to what you made. Which is also fine if you don't plan on adding any more fonts. Also instead of downscaling the high res font you should've gone with upscaling the low res font. Low res font should be easier to upscale because 1) It has less things that need to be proportionally adjusted 2) You made it? Normalization is the key for most of such cases.
Yes, I was screaming "why are you not using version control". Your answer of "I kind of was, but not really", though, is very relatable. Even after I got past all the errors and merge conflicts I would cause myself early on, it still took me a while to understand what constitutes a good workflow. I'm still not sure I have it down, but at least I've learned to commit often, branch often, and rebase to clean up BEFORE publishing. That's a start right?
I think my approach would've been creating a new script and add it to each font object in the scene. Within a settings singleton, I would keep the state of the selected font option (probably as an enum) and in the scripts Awake function I would interface with the font component of the font object. This would add one function call at runtime for each text, but it would also keep the state of the fonts and could maybe even have options for edgecases, in case a certain element needs different size scaling with a new font.
I feel like the easiest way to di this would be to create a class that inherits from the text system you are using and on Start() handle what font it should use and listen to an event to change while plating. Now just replace all your text with your custom text class
well, i'd say it was worth it, it looks way more readable and smoother! if the game ever releases and i get around to playing it (don't worry, i'm pretty sure i will), i'll definitely turn this option on when i can.
I suggest you use Plastic SCM instead of Git since it's built to work with Unity and it's much more user friendly in my opinion. It's also officially owned by Unity (I think, I might be wrong idk)
If you are talking about my unity editor, yes I wish I had dark mode, and I do have unity pro, but I’m pretty sure it’s not available in my version of unity or something. Idk it’s weird
@@Ultimantecat oh, gotcha. Yeah I’ll see about that. It’s just that I’ve stuck with that background for so long now it would feel kinda weird to change
You don't use Source Control/Version Control (Git) to easily revert to any point of your development? That'd help you make branches to your game so you could test stuff and if all goes to sh*t, just delete the branch and you're back.
i love how you shamelessly talked about your struggles and problems you ran to with some softwares and code. This is something that i really lack, i have a lot of shame talking about theese thing with a experienced game dev.
Damn yeah a good rule of thumb would be to commit and push everytime something new is about to be worked on incase it goes wrong and then u can just revert back to the previous commit
At one point in the video, I was thinking couldn't you check for font size and type at the beginning of the game at startup and adjust accordingly? Like with a screen reader that decides what font and size it is at game startup? This would obviously require four different cases, (normal font, normal size; Rich font, bigger/smaller size; Rich font, normal size; and normal font bigger/smaller size) but I think it would work. I'm no programmer and don't know much, so I have no clue if this would work, but it seems like a good idea. Edit: After watching the rest of the video, it seems that you've already done this in a way.
Set text boundaries properly, guys. Actually stablish the limit some text is allowed to be drawn at, even if it looks just like you wanted the first try without further specification, this information might become crucial in the long run, and at that point you want to do it as you go, not suddenly for EVERY text in your game
Not sure if its ever been brought up or already implemented but I would recommend adding controller support as I know some people are just much more comfortable playing with a controller than on keyboard and mouse. (I for one don't think I'd play this game with a controller but i am sure some people would prefer it)
how to save changes to git: mark the files you want to save, add a message, and hit commit how to discard changes you haven't yet saved to git: find a button somewhere that says "discard" and press it
I suggest starting with a higher resolution but an exponent of your planned font size, in this case 5x3 would be something like 20x12. Instead of changing font sizes you are just changing fonts with variable amount of smoothness in the characters. This can be extended to a general rule: If you intend to switch between multiple fonts, maintain resolutions or powers of resolutions.
Ah yes, the fear of Updates. About a year ago, i updated my long running project from Unity 2017 all the way to 2021. That was a scary journey, but I'm glad I did it.
Its nice to see someone fiddle with and ruin parts of their project because it happens to the best of us, even when we think we are being really careful
@@teamdoodz yeah but if you are working on a project for the first time you are probably just going to be using unity or something and not even know about git
Since you are a game dev, I would like to know what you think is the best time of game to make for beginners because i'm thinking of getting into game development
not really that it matters, but i'm watching this at 10:40 at night and wow that white screen that you keep returning to is bright. great video though and good job finding a way to fix it!
For version control, use plastic SCM, it is incredibly good for unity. Also, text mesh pro has texts with an auto size for the text to always occupy a specific space.
@@keckstreme I think the same way as you, but unfortunately it is deprecated, and I don't know if is still usable or how much time it has left. That was why I was recommending this one, it will be the one to choose in the future.
If I ever encounter a bug while gaming (not while I'm playtesting, ovi), I am going to break down crying. Not because I am upset there's a bug, but because it reminds me of having to fix bugs in my own games.
As soon as I heard the words "Deprecated" relating to a unity feature, I knew stuff was gonna go wrong. Part of the reason I switched from Unity to Godot 😅
couldn't you just not commit this change to github, save the scene and then click on revert changes for the scene under source control? I'm using vscode and don't know if it works the same in other editors.
I still don’t know how to use git or github. I write some code, I change some code but usually, instead of deleting that code I put it in a multi line comment and when I no longer need it, I put it in a separate file containing a bunch of other multi line comments with code in it. Then when something breaks I go take a look on how I did it before and write it anew. Variable names probably don’t match anymore and the new code is likely to be much cleaner. But if I could convince myself to spend the time to learn git, I would use it
I hate how Unity has this idea of "Oh don't worry, those properties are immutable and safely isolated from the actual running instance of the game," then adds a sudden exception for _that one time_ one uses _this function_ that somehow selects objects _outside of the instance and into the very code and perma-changes them in the source !_ I mean, self-modifying code is neat sometimes, but in this case is really dangerous and totally not in the logical spirit of using an instance system which entire purpose is to protect the source code from tampering with itself !
Welcome to programming. There will be days like this. Luckily they are spaced out (usually). I've found that when they happen, it is best to take a break and either sleep, do something fun or relaxing, or work on another project. Then when you come back, take a few minutes to ask, really ask, what is going on really. Many times the problem becomes obvious at that point. If not, then I systematically check one assumption after another until I find the faulty logic. Remember, if something is frustrating you really badly, take a break. Cheers!
I really recommend the video "Git tutorial for dummies" by Nick White, this video is REALLY good! It helped me with git, and Nick White explains everything very good! And your videos are very cool! Slimekeep seems to be very cool!
@BenBonk Slimekeep is definitely something I want to get and play... when I get a new computer that isn't a 9 year old Chromebook. Good luck with your game!
That one community member that suggested the rich text option single-handedly caused some of the worst days in your life lol
💀
#xd
that guy was illiterate
Personally, i think Noto Sans is a good choice for a hi-res font
Fun Fact: Sans means Without.
I am always amazed by developers that get so far without learning how to use version control. I'd invest a few more hours into learning git again, it's a skill that pays off forever.
It's not even super difficult for solo developers- most of the time you can get by with just git add and git commit
@aquau5777 ikr? The most difficult part about git is coordinating with a team to have a standarized pipeline and not to step into each other... which is one of the main problems that branches solve. But a single developer working on a single branch has to be the easiest and safest workflow one can achieve.
I have no idea how version control works either. I was in a group project. I uploaded a branch and it worked fine. I tried to update the branch and it didn't work. None of the new files were there, the branch was the same as it was before. Also, github won't accept files that are too big, or folders with too many files. I don't understand how I am supposed to back up my files if it won't let me upload them.
@@xei2694 In general when you have an error there is an error message, that should either help or be googlable. And for big files you need to set-up Git LFS (large file storage).
This for sure but also unity and git can have some weird issues if not configured correctly. From what I've seen you can replace the .meta files with .yaml files but that should only really be an issue if you have multiple devs.
Also dealing with hitting the cap on LFS and having to pay I could see being a big reason for some developers to not actively use github specifically.
There is a "Localisation" Untiy Package that adds a scriptable object system to every text object automatically.
You could use that and add a "language" called rich text. It basically makes a new instance of the component (in the editor, with a dropdown) to configure everything about it separately.
This is actually insanely relatable. I've been programming video games as a hobby for over 5 years now and the amount of times I've needed to scrap an entire section of code because of numerous issues is unbelievable. Whether it be programming errors, a conflict with other code, or an idea that just wasn't really that good, starting fresh was the simplest way to make progress.
Yup, that's game dev for ya. Nice to see I'm not the only one.
@@BenBonkI actually did this once, but I later realized my old method that I was using the entire time only had one little issue that could very easily be fixed by literally just using a different function.
Yeah, I felt stupid but I had succesfully made working minigames and all was taken care of.
Nice
yeah I really feel this too
@@BenBonkyou won’t see this message lol
@@wolf-hw1hh yeah I wont
Just a quick side note that rich text is a term used to differentiate between regular raw strings and a post processed version that extracts tags like etc and converts them into styling options that only apply to parts of the text.
That name is a fairly universal standard across all text editors, TextMeshPro included (unchecking the "rich text" check box in the extra options will turn off the tag parsing)
I would also suggest writing a more generic version of the font switcher to support N number of fonts, which could allow you to add a dyslexia friendly font option without too much effort.
It's by making these kinds of mistakes that we learn just how valuable version control and frequent backups are. Hopefully you can grow as a better dev from this !
I'd store the values for the spacing in scriptable objects instead of in the start function.
This video is my reminder tho to learn version control
Oh snap, I totally forgot scriptable objects existed
@@BenBonk happens (i think)
I've heard of scriptable objects before and was wondering what is the benefit(s) of using it. Especially in this case. I know when you are making, for example, multiple items like swords that have the same stat types it's more efficient and simplified, but I don't see the point in this case. If you could help me get a grasp, it'd be much appreciated.
@@kaiden2348 I'm not exactly good myself but I'd put those values there because I think it's better practice than storing them in the start function. Also allows you to make spacing values for other fonts in the future.
Although this method is kinda weird because tmp has an auto size feature turns out lol
@@stellar7933 guess ben didn't know about that either lol, Having the availability for that seems helpful. Thanks for the response
I’m so glad I chose to be a writer instead of a programmer.
Not that I’m any good as a writer.
The game's coming along really nicely and your video editing's getting really good to! Yep it can be pretty frustrating when you just can't get something working. But good luck on the rest of Slimekeep! 👍
Thank you!
what a soul crushing journey, man. Promising ideas not working, losing progress, having to scrap stuff... Mad respect!
This was very needed. Always thought the font was hard to read. I would suggest making it the base font if I’m being honest. It looks way better and it still makes sense with the game.
Yeah honestly I kinda thought that when working on this feature because I really like how the new one looks. Although at this point I might as well keep them both an option after going through all that work
@@BenBonk Yeah I agree. Imo you should make the new font default and add the old one as a option like “retro font” or something along those lines
All you needed to do, was friggin enable the multiply the text by 2, whenever the checkbox was ticked, otherwise multiply the text size by 1.
Also, Do some research on mono-spaced fonts!
love your uploads man! always gets me hyped for slimekeep!
Thanks dude!
Thanks for sharing this journey! While I've been working on my first commercial game I also learned a few of these hard lessons where if I had simply just done it a better way first it would have saved me a ton of time later. But, that's all part of the game dev journey.. you don't know what you don't know. Cheers, and good luck!
No problem, thanks for watching! It's can be a bit rough, but yeah, that's just the game dev experience for ya
Me and a friend who make games together also wanted to add a font switch, so it's admirable seeing how you did it with that "old" Unity version and with so many problems that kept appearing. Good job!
This is so cool! I really liked the video and the game itself. I hope it will be interesting (when it comes out)!
I love your honesty in this, it's admirable, and you keep the video entertaining and positive despite it. It's something that I think a lot of game dev youtubers miss out on sometimes; the fact that they're learning. It's not like they don't know or mention that fact, but I haven't seen many handle it as nicely as you have here.
Thank you, that means a lot and was definitely what I was aiming for in this video. Just wanted to show the “realities” of gamedev I guess, and keep myself honest on this devlog series.
If you ever want to try to use version control again, I use Git Kraken to get around a lot of the headaches that I had with Git Bash. Can't wait for the next devlog!
Thanks, I’ll look into it!
@@BenBonkbro do you even commit code
Nice job at the end man. Once I saw your "plan" at the beginning I was like "Oh no". But you managed at the end haha. I would have use events and something similar to what you did; once you tick the box, fire an event that all "TextHandlers" are subscribed to, then modify the text. You could even use 2 TMP objects and swap between them, but that's a bit inefficient. Anyway, you got it, that's the important part! Keep it up my man!
Please tell me that you find out Textmeshpro has an auto size option. I'm so worried watching this and seeing all the work you're doing, when theres a solution built into Unity!
🙁
It's so infuriating and funny at the same time when you work so hard to fix a bug that was fixable with something that was there in the engine by default, waiting to be enabled.
Yeah, the solution you settled on in the end is the right way to handle it (though you probably shouldn't duplicate the values across every text object).
You can think of it like this: you have a limited number of ways in which you want to draw text. This number is far more limited than how often text occurs in your game. This means that it is not the responsibility of the text to know how it is drawn. The text object just takes the desired content and the desired presentation, and combines them. It shouldn't care about what the desired presentation is, only where it can find it.
From there, you can point each piece of text to the object that provides that information. (You could even have multiple, and have some text point to one and some to another.) You can then make changes to that one object, and have all text that points to it automatically use the updated values when relevant. Because your text may be bound to the scene, but your presentation provider can live in the global scope, and is thus always active.
So in the end, your presentation provider just sits there and does nothing but answer questions that your other objects ask it. Its role is not to make decisions, but to contain knowledge. And your text objects drop by to ask for that knowledge whenever they need to. Their role isn't to make decisions either. They only take the information and use it to render something to the screen. So wherever you're making a decision about presentation (probably in the settings menu), all you do is notify the presentation provider so that it updates what it knows about. The rest works itself out after that.
I should note that I'm not super familiar with Unity though, so if anything here doesn't make sense in the context of Unity, just ignore what I'm saying. Certain tools have certain ways of handling things and it can be completely different from other tools. That can be a bit hard to get a grip on sometimes.
This is why I don't modify data that should be immutable. I remember doing something similar making a State machine for a character and changing the state every second (changing images, translating the sprite, changing images again, re-translate the sprite again). So one day I learn my lesson (the bad way) and I started making struct of parameters for each case. And making the system use one struct or another as needed. I also learn to use MVC patterns and things got easier.
I think everyone goes through this pain once.
I'm really digging the new music in your vids 🎶
Wait, you’re calling the high-res font “rich text”? Is that not going to get confusing if you ever want to add actual rich text for things like italicizing words in text boxes?
off-topic idea for slime: summoner summons 2 first stage normal slimes ( +1 summon per stage)
Watching the video hurts me physically. There are so many ways to do this better. Something I thought of off the top of my head is give every text object a component which does something on awake. It adds the component reference to a dictionary along with a custom class. This custom class would just store the reference to the textmeshprougui, and a float for the original pixel size. Then when you want to change everything you can loop through everything in the dictionary, skipping nulls, and just set the fonts accordingly. Finally you just store the font and pixel size multiplier for the font in a globally accessible manner through a singleton or something and then go to any text component that we made earlier in the awake, check for those values and have it update itself accordingly after the default data was assigned in the dictionary.
Nice video, can't wait to play the game!
I don't know if it would just do it, but you can just check 'best fit' in your text
I’ve resorted to just making uniform fonts in Inkscape every time. It’s become the default now
I would also recomend adding a dark outline/black box to the text to have a high contrast, making it easier to read.
I know literally nothing about game dev, but i am a designer with pretty severe dyslexia. Anecdotally I can say that readable fonts are one of the primary deciding accessibility features of I play a game. It's not just "high resolution". I always encourage excellent type design in game, especially using fonts designed for legibility.
5:21 Bro please, start using version control. Git and svn are so easy to set. In case of FindObjectsOfTypeAll, save [yes, save], quit unity and do a reset or revert on your working directory. And be sure to commit or push when things are working. These systems provide you vary nice backup strategy and make it possible to work in a team :)
6:27 - bro, there are countless of discords with gamedevs and people who like to socialize and help :)))))
7:36 - sometimes deleting huge code only to rewrite it to do better job isn't nessesarily the same as "killing your darlings". treat it as hair trimming :D instead.
9:01 - at the end you did the same thing I remember doing last time. In my case, single script for both font override and localization handling :)
Add chests to the game and ruins that you could go in the basement that either has a puzzle or has a mini boss or many enemies to fight and at the end you could get an extra health thing (raising your max health, or giving you temporary health), more boosts, or a unique item or weapon. You could make it so that the slimes could randomly try to attack you whenever you are in a room with slimes or make rooms that have no enemies or anything
Is there no universal theme/font changing for unity?
No matter how experienced of a game dev you are, this situation will always happen.
No, no it won’t.
I have to say: making and uploading this video is pretty brave but important. You may get ridiculed by a lot of people for this, but this may bring people to learn some sort of version control without them losing a bunch of progress and learning the hard way.
Great video!
we all make this mistake at least once. a good dev makes the mistake only once or sees it coming and never makes it at all, and a bad dev repeats the mistake over and over.
I love how you went through all this hassle when there already was an auto size option.
lmao i didnt even think of that (i would have if it was my own project tho xd)
Hahahhahahbsbahehajakebsjaoahje
Does unity don't have a same thing like a theme in godot?, its like a css where you can create styles to different ui nodes
My favorite part was when he said „It’s slimin’ time“ and slimed all over the place
That doesn't sound right 😂😂
@@man_man324 Just realized that too lol
I love sliming everywhere 😍😍😍
Ayo?
@@AngelShrimpChipsTHATS WHAT I SAID
It feels like you really went with the hard approach. While I don't know pretty much anything about unity, I'm pretty sure that the font settings should be a structure with {font, defaultFontSize, defaultPadding} and not just font family. For example:
Your base font looks like this:
"My font", 10 pt, 0 letter padding.
You add a new font which has the same parameters and everything is off scale. Okay how do you fix this?
You just fine tweak the base default size of the font so instead of it having an associated default size of 10 pt it would have the pt size of lets say 2.5 and letter padding of -1. And final result is "New font", 2.5 pt, -1 letter padding.
Well, probably it should've been easier that way. The visual results though might have not been that pleasing compared to manual work. But this system is definetely is easily expandable compared to what you made. Which is also fine if you don't plan on adding any more fonts.
Also instead of downscaling the high res font you should've gone with upscaling the low res font. Low res font should be easier to upscale because 1) It has less things that need to be proportionally adjusted 2) You made it? Normalization is the key for most of such cases.
Font be like: I gonna end this mans whole game
Yes, I was screaming "why are you not using version control".
Your answer of "I kind of was, but not really", though, is very relatable. Even after I got past all the errors and merge conflicts I would cause myself early on, it still took me a while to understand what constitutes a good workflow. I'm still not sure I have it down, but at least I've learned to commit often, branch often, and rebase to clean up BEFORE publishing. That's a start right?
your getting so close, I cant wait to play slimekeep!
I think my approach would've been creating a new script and add it to each font object in the scene. Within a settings singleton, I would keep the state of the selected font option (probably as an enum) and in the scripts Awake function I would interface with the font component of the font object.
This would add one function call at runtime for each text, but it would also keep the state of the fonts and could maybe even have options for edgecases, in case a certain element needs different size scaling with a new font.
I feel like the easiest way to di this would be to create a class that inherits from the text system you are using and on Start() handle what font it should use and listen to an event to change while plating.
Now just replace all your text with your custom text class
So relateble. As a game developer i always bump into some issues that player probably wouldn't notice, but my perfectionism just don't let me relax 💀
Why is the smaller font bigger then the large resolution font?
Wow I am shocked that the font forge solution didn’t work
Pro Git is the only book about a specific piece of software I ever read cover to cover and it paid off massively.
well, i'd say it was worth it, it looks way more readable and smoother!
if the game ever releases and i get around to playing it (don't worry, i'm pretty sure i will), i'll definitely turn this option on when i can.
I suggest you use Plastic SCM instead of Git since it's built to work with Unity and it's much more user friendly in my opinion. It's also officially owned by Unity (I think, I might be wrong idk)
It's been renamed "Unity Version Control" now, somewhat irritatingly, but I totally agree.
Another video from the legend!
You should edit with dark gray backgrounds instead of white, I think it would save many people's eyes as well.
If you are talking about my unity editor, yes I wish I had dark mode, and I do have unity pro, but I’m pretty sure it’s not available in my version of unity or something. Idk it’s weird
@@BenBonk I meant the editing, like how at the beginning it says Let me tell you a story with the white background
@@Ultimantecat oh, gotcha. Yeah I’ll see about that. It’s just that I’ve stuck with that background for so long now it would feel kinda weird to change
Mom, wake up, New slimekeep devlog
You don't use Source Control/Version Control (Git) to easily revert to any point of your development?
That'd help you make branches to your game so you could test stuff and if all goes to sh*t, just delete the branch and you're back.
i love how you shamelessly talked about your struggles and problems you ran to with some softwares and code. This is something that i really lack, i have a lot of shame talking about theese thing with a experienced game dev.
Damn yeah a good rule of thumb would be to commit and push everytime something new is about to be worked on incase it goes wrong and then u can just revert back to the previous commit
Yes, I agree
@@BenBonk Also keep a separate branch for wip features, and only pr to the main/dev branch when something is working! Don't work in your main branch!
At one point in the video, I was thinking couldn't you check for font size and type at the beginning of the game at startup and adjust accordingly? Like with a screen reader that decides what font and size it is at game startup? This would obviously require four different cases, (normal font, normal size; Rich font, bigger/smaller size; Rich font, normal size; and normal font bigger/smaller size) but I think it would work.
I'm no programmer and don't know much, so I have no clue if this would work, but it seems like a good idea.
Edit: After watching the rest of the video, it seems that you've already done this in a way.
Will there be a Debian/Linux port of the game?
whats the song that plays whenever he makes the system work called ?
Alternative title: Benbonk becoming going deeper into his insanity for 10 minutes
Set text boundaries properly, guys. Actually stablish the limit some text is allowed to be drawn at, even if it looks just like you wanted the first try without further specification, this information might become crucial in the long run, and at that point you want to do it as you go, not suddenly for EVERY text in your game
Not sure if its ever been brought up or already implemented but I would recommend adding controller support as I know some people are just much more comfortable playing with a controller than on keyboard and mouse. (I for one don't think I'd play this game with a controller but i am sure some people would prefer it)
Hey ben bonk i just wanna say that I love your game series (:
Thank you :)
There are a few version control options. There is git, there is also a version control called Fossil.
how to save changes to git: mark the files you want to save, add a message, and hit commit
how to discard changes you haven't yet saved to git: find a button somewhere that says "discard" and press it
I suggest starting with a higher resolution but an exponent of your planned font size, in this case 5x3 would be something like 20x12. Instead of changing font sizes you are just changing fonts with variable amount of smoothness in the characters. This can be extended to a general rule: If you intend to switch between multiple fonts, maintain resolutions or powers of resolutions.
This is inspirational Ben!! Good job!!
Thanks lol
It always takes that little step back to fix things
Switching between the dark background of the game, and bright white background is blinding.
Whats the music at 1:05?
Ah yes, the fear of Updates. About a year ago, i updated my long running project from Unity 2017 all the way to 2021. That was a scary journey, but I'm glad I did it.
just a tip
every time you make a slight change into the game, make sure you make a backup in case stuff breaks
Its nice to see someone fiddle with and ruin parts of their project because it happens to the best of us, even when we think we are being really careful
That's why version control exists.
@@teamdoodz yeah but if you are working on a project for the first time you are probably just going to be using unity or something and not even know about git
@@puffcap_ true.
Why didnt you use unity location system? it allows you yo change the font used on the text
couldnt you just have every text object's font set to a variable and you change that in the script
Couldnt you just reset font size in the start function yourself so it wouldnt break
Since you are a game dev, I would like to know what you think is the best time of game to make for beginners because i'm thinking of getting into game development
not really that it matters, but i'm watching this at 10:40 at night and wow that white screen that you keep returning to is bright. great video though and good job finding a way to fix it!
1:06 song?
For version control, use plastic SCM, it is incredibly good for unity. Also, text mesh pro has texts with an auto size for the text to always occupy a specific space.
no no no plastic SCM is 1 million times worse than deprecated Unity Collaborate
@@keckstreme I think the same way as you, but unfortunately it is deprecated, and I don't know if is still usable or how much time it has left. That was why I was recommending this one, it will be the one to choose in the future.
Why don't you use auto size for the texts.
When the font is to small it would scale up to a bigger size to fit inside the text area.
why not just have the selected font as an exported variable on a globally persistent object?
yay new video! and love your consistent uploads!
Why do you work in Unity 2019 when 2022 lts is already released
If I ever encounter a bug while gaming (not while I'm playtesting, ovi), I am going to break down crying. Not because I am upset there's a bug, but because it reminds me of having to fix bugs in my own games.
New devlog hell yeah
As soon as I heard the words "Deprecated" relating to a unity feature, I knew stuff was gonna go wrong. Part of the reason I switched from Unity to Godot 😅
couldn't you just not commit this change to github, save the scene and then click on revert changes for the scene under source control? I'm using vscode and don't know if it works the same in other editors.
I still don’t know how to use git or github. I write some code, I change some code but usually, instead of deleting that code I put it in a multi line comment and when I no longer need it, I put it in a separate file containing a bunch of other multi line comments with code in it. Then when something breaks I go take a look on how I did it before and write it anew. Variable names probably don’t match anymore and the new code is likely to be much cleaner.
But if I could convince myself to spend the time to learn git, I would use it
I hate how Unity has this idea of "Oh don't worry, those properties are immutable and safely isolated from the actual running instance of the game," then adds a sudden exception for _that one time_ one uses _this function_ that somehow selects objects _outside of the instance and into the very code and perma-changes them in the source !_
I mean, self-modifying code is neat sometimes, but in this case is really dangerous and totally not in the logical spirit of using an instance system which entire purpose is to protect the source code from tampering with itself !
Welcome to programming. There will be days like this. Luckily they are spaced out (usually). I've found that when they happen, it is best to take a break and either sleep, do something fun or relaxing, or work on another project. Then when you come back, take a few minutes to ask, really ask, what is going on really. Many times the problem becomes obvious at that point. If not, then I systematically check one assumption after another until I find the faulty logic. Remember, if something is frustrating you really badly, take a break. Cheers!
0:50 New slime? I don't recognise that shadow-slime looking thing!
That’s the hacker slime, introduced him a few devlogs ago I believe
@@BenBonk And so it is! I forgot what Hacker Boi did.
I really recommend the video "Git tutorial for dummies" by Nick White, this video is REALLY good! It helped me with git, and Nick White explains everything very good!
And your videos are very cool! Slimekeep seems to be very cool!
Have you heard of version control software like git or perforce. It allows you to experiment with your project without any side effects what so ever
This new font is literally just a second row of pixels 😭
I literally yelled "use version control" at my screen right before he said, "you're probably yelling at me to just use version control"
the amount of green on your game makes my eyes cry bro
What r u gonna do after slimekeep?
2:50 Also, FindObjectsOfType is very slow and heavily impacts performance, so you should only call it in the start function
Rewatching this after the Podcast with Brandon. ❤
What font did you use for the "Rich" option? I'm making a game of my own and it seems like a nice match.
It’s called “The Impostor”
@@BenBonk Seems more like "Pixellari"
@@austin5359 Pixelarri is a font I used to use, but I can guarantee you the font for the rich text option is “The Impostor”
@@BenBonk Oh, alright.
@BenBonk Slimekeep is definitely something I want to get and play... when I get a new computer that isn't a 9 year old Chromebook. Good luck with your game!
I know you have a system that works now, but you could have just changed the font scale / baseline / etc inside the font asset, no?