These tips really helped to speed up production of my new MMORPG. Edit: This was meant to be a joke about what he says at the end. I'm not actually working on an MMO.
My own advice for that, before the line you're planning to delete later, add comment "// TODO : Delete", and before the end of your project, go through all of your "TODO"
[Obsolete("Method1 is deprecated, please use Method2 instead.")] sounds better to me because it creates a warning for you in the editor. But honestly i've never used it.
TIP #3 made my life A LOT easier. I was checking every once in a while for all the objects and organizing them depending on their Y values, this saves me from a lot of performance issues. Searching all objects, accesing their transforms and comparing them, sorting them, and changing their sorting order
I have another tip! similar to #24 (Ctrl+Shift+F alight to view), you can press Ctrl+Alt+F to move an object to the focus point of the scene camera. You can also middle-click on any 3D object to focus the camera on that point. This is useful if you wanna place an object on a table or the ground, you can middle click on the spot you want then with the object selected, you can hit Ctrl+Alt+F to place it there.
Tip 37 was a big joy to see. When I went to use it, got errors. Remembered tip 31. Got tip 37 to work! Learned a few things. Best tutorial channel ever. Always learning something. Start putting them in my credits.
I always like to watch those "100 things you didn't know about minecraft" videos even though I don't really play minecraft anymore because I just find them really interesting, and with these videos I get the same thing but I'm actually learning useful things too! Thank you for making them :D
I got another string concat Tip, better than concat and more concise than string builder for when you want to just concat parameters. In Unity versions 2018.3 or newer , you can now use interpolating strings, no more slow GC alloc string concats, nor lengthy StringBuilders. just add the '$' symbol before your string and you can add the variables you want to concat to the string between '{}' Example: var userName = "Bart Simpson" var age = 99; $"Hello World, my name is { userName } and my age is { age }"
@@Pcat0 Yeah, they both have String.format, and I use it, especially for display-localized templates. But it's got many of the issues of old C-style printf, and format''s not as clean/legible or null-friendly, even if $-notation is likely just syntactic sugar.
Im literally loosing my mind just at the debug mode in inspector. That is going to be so useful. Thanks for all the tips and everything you do generally, but that really blew my mind.
Tip 50: Instead of copy-pasting each field manually after locking inspector, instead Right-Click on the component gear with your desired values, select Copy Component, then on the other component inspector, Right-Click on the component gear and select to Paste Component Values
One tip i think is important is using indexors when you have a class that has an important array or list variable in it, like a dungeon generator or something. You can then create an indexor in that script so that other scripts can access that array or list indirectly by just using the name of the variable they id'ed that class with
@@tonziss not only that, but it also sounds like he's still talking on the same tip since there's no indication (sound, highlight, etc.) that he's actually on the next tip already. Thus, you'll have to continuously check on the lower left to see if we're on the same page. Even then, I, at least, lose concentration on what he was saying by doing so.
@@DEATHFIRESS yeah, that too. And I also lose my focus when i start thinking about a tip that i find very helpful in my situation and when i come back to reality he's already two tips ahead... : P
i rewatch this, and a couple similar videos, everytime i start a new project, because sometimes they have nice tips, but i dont need them at that moment. so its better to find them and use them during a project that requires them to get used to them.
"Destroy(gameObject)" works after an update loop. Sometimes we need to use "DestroyImmediate(gameObject)" so that our code do not reference to that gameObject before update loop is finished.
Awesome video! Being a decently strong Unity user I thought I would know the majority but there were actually a lot that I was completely unaware of. This vid was a great start to 2019 I can't wait to see what this year brings for the Brackeys channel :D
It's very hard even for a team of 100+ people, too much coding, need server maintenance (bc you expect for a lot of people to join), animations and characters, quests, story aaaand, it's too much expensive to be done in a short time of (
You're the best! Somehow I haven't seen any of your 2019 videos... I'm subscribed to your channel, but they haven't shown up in my recommendations. I'm stoked to see how many videos are available to me! hahah
62 and 76 are wrong! The examples and reasons are false. 62. When concatenating string literals they are compile time optimized to just one string! (I.e does not create a single string) 76. This might actually be worse than before! *If anything you should use ' const string a = "asdf" ' if anything!* static readonly is going to potentially make loading the variable slower than const. It also never creates a string! All string literals are contained in the compiled result. So passing in a string literal directly has no performance cost other than passing a pointer.
stackoverflow.com/questions/21644658/how-to-use-stringbuilder-wisely you are correct untill concatenations of sise 8, but not sure how runtime concatenation comes into play.
#76 won't allocate mem, it will create a literal once and use it, so not every frame just once. Still you can save tiny bit of memory if you use the const, you should do it. #97 says "on deactivated game objects" but the video is deactivating a component, so not sure if true or just wrong example
This video is actually awesome, as are all the others you do. Congratulations @Brackeys, keep the awesome work x) I'm really considering of starting supporting you on Patreonnnnn
note that StringBuilder is only useful if you have an unknown amount of inputs, otherwise $"" strings (string interpolation) is a cleaner method for concatenating strings as it does not need you to instantiate a StringBuilder.
Couple of these had me saying "How am I just finding out about some of this stuff just now!?". Also on a side note of the mmorpg tip, only if you know what you're doing ;) But ya most people shouldn't touch that, even single player rpgs are very very complicated even for advanced game developers
@@beardordie5308 so for seemless loading screen would be level 1 loads when near border of -> level 1 & two merged -> load scene 2 when end of lvl 1 & two merge , unload lvl 1 lvl 1&two when distance great enough that don't see lvl 1, this is *mind blown*
This lets you load parts of a scene (I.e. different regions of a big open world) seamlessly without having to pause while loading or consume lots of memory
Yep, I checked comments to call this out as well. Hopefully it's an easy fix, or someone may forever be misspelling it after watching this awesome video.
Reminds me of the old Tips & Tricks live sessions the Unity Learn guys used to do. I've been using Unity for ~3years, and some of these were even new to me. Scene merging!!
@@rodbot can you not see than I spell it cache. I obviously didn't notice that he wrote it as cash. If it didn't know it was spelled cache I wouldn't have written caching would I. Can you get that through your thick skull?
16. is just a myth!!! :D Math.Sqrt() is even faster than dividing. Of course it's slower than multipling but not that much. A 100.000.000 iterations of Math.Sqrt() on my i5-6500 takes 596ms (double) which is faster than 100.000.000 iterations of dividing which takes about 700ms on doubles. Multipling takes about 350-400ms. So you should be more scared of dividing in your code than of calling Math.Sqrt() :) From what I read it's implemented in x64 hardware that's why it's so blazing fast :D But never use Math.Pow()! It's 5-6 times slower. You can test it on your own CPU: using System; using System.Diagnostics; class Program { static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); double x = 0.0; // iterates 100.000.000 times for (double i = 0; i < 1e8; i += 1) //x += Math.Sqrt(i); // Uncomment to test Sqrt //x /= 0.1; // Uncomment to test dividing sw.Stop(); Console.Out.Write(sw.ElapsedMilliseconds); Console.In.ReadLine(); } }
PROE yeah, but running this code with vector3 makes it at least 3 time slower. running this actions in update takes frame time depending on power of your device. if you run it on mobile, in update, and many times (for example, for calculating path to many enemies based on distance between tiles) you could easily loose 5 fps on that. 30 fps for mobile is most commonly used standard. so even 3-5/30 - it's not few.
@@SerhiiZhydel My point is that it's not REALLY slow as Brackeys said. If you're not targeting mobile device and don't have milions of vectors to calculate per frame then you can freely use it, it's lightweight... Dividing is more resources demanding. It's just a myth that it's "really slow" and that was my point.
@@ethancheung1676 Typos, I was so tired that half of the words were written properly and half not :d Edited, but everyone probably knew what that meant after getting to the end of my sentence where words were correct.
People repeat this due to the sheer amount of work involved. Most of the time when the average person tries they get discouraged and quit and it’s better to start small and actually complete something.
It's way way way to high level for beginning designers or even intermediate designers if they don't have a team of 20+ people. It's also an oversaturated market so even if you do everything right it still could fail in the long run. Start small, as small as you can think. One of the first projects I actually succeeded with was recreating asteroids, which made me better understand and grow my skills which helped a ton with my later work.
I'd guess it's impossibly hard, unless you have a team of 100 people at least. Which will still take like 5-10 years. Based on how much it took other MMOs. And then, there's still like really small chance it's going to be picked up by anyone. Oh and not forgetting, you also need a huge budget.
Oh please just stop suggesting to not make use of square roots already, modern CPUs will handle millions of square root operations before dropping the framerate
i thought this video would just tell you stuff you would never need or is stuff that everybody like "Ctrl +S saves stuff". But i learned way more in this 11 min than i did while reading documentation. Thank you very helpful
It's less a joke and more just game design advice, mmos are games hard to code in a over saturated market (if you haven't noticed the fast amount of mmos coming out recently) they are basically not at all worth the time and effort considering WoW is still the largest mmo out there and it's like 20 years old. The closest thing to a joke could be the amount of mmos that fail but I'm pretty sure this is just pure advice.
Every new Unity developer wants to create MMORPG he knows (ie World of Warcraft) but better! - Of course the scope is too large to be finished by a solo developer (when usually companies with 100+ devs work on it for 4-6+ years)....
@@shadoninja that's why I said both, it's not worth the time and effort because in the end you'll have worked so hard on something for so long that it won't really be worth it combined with the fact that it's in a over saturated market (there's like at least 5-10 mmos coming out a year) that making one just won't really get the value you put in.
Re the one at 1:38, since Unity 5.3, instead of: "yield return StartCoroutine(SecondCo());" You can just do: yield return SecondCo(); And it silently calls StartCoroutine for you. Instead of silently failing like it used to!
My personal tips... CTRL + p Plays your game, and hitting it again ends the session CTRL + SHIFT + P Pauses your game, and hitting it again continues the session The profile will also have A LOT of overhead if your scene is incredibly complex with a lot of objects and a lot of scripts.
2:00 That's smart. There should be static methods in Vector3 that do exactly this. Vector3.DistanceGreater(pointA, pointB, dist); Vector3.DistanceLower(pointA, pointB, dist); Vector3.DistanceEqual(pointA, pointB, dist, tolerance); // of course with a tolerance because it's float and not int.
1 Selection Outline 0:35
2 Pixel Perfect Camera 0:40
3 Sprite Y-based Sorting 0:48
4 Destroy delay 0:57
5 Create material from shader 1:03
6 Execute code without empty object 1:09
7 Save changes in play-mode 1:17
8 Random boolean 1:22
9 Struct instead of Class 1:26
10 Auto-statements 1:32
11 Coroutine(ception) 1:37
12 Animation script parameters 1:41
13 Focus in the animation window 1:48
14 Toggle between Curves and Keyframes 1:53
15 Reverse animation 1:57
16 Comparing distances quicker 2:00
17 TextMeshPro 2:12
18 SerializeField 2:18
19 HideInInspector 2:23
20 Rename a variable and keep the value 2:28
21 Folder shortcuts 2:33
22 Focus 2:39
23 Focus follow 2:42
24 Align with view 2:44
25 CompareTag function 2:50
26 Empty objects as dividers 2:55
27 Find objects with Component 3:00
28 Find assets of Type 3:05
29 Easily move lines 3:15
30 Documentation shortcut 3:21
31 Documentation History 3:26
32 Expand/Collapse All 3:33
33 Changing Editor Layout 3:41
34 Change editor colors 3:47
35 Tinting the editor in playmode 3:54
36 Toogle scene effects 4:00
37 Menu Item 4:06
38 Context Menu Item 4:13
39 Hiding layers 4:19
40 Locking layers 4:23
41 Layer sub menus 4:28
42 Global C# Defines 4:34
43 Color Picking 4:44
44 Copy/paste colors 4:48
45 Maximising Windows 4:51
46 Serialize Structs and Classes 4:55
47 Collision Matrix 5:00
48 Collider interaction Matrix 5:05
49 Math in Inspector 5:13
50 Locking the inspector 5:17
51 Inspector debug mode 5:38
52 Debug Log highlights an object 5:46
53 Styling in Debug Logs 5:53
54 Plotting debug values 5:58
55 Add Component shortcut 6:07
56 Importing save files 6:14
57 Keep photoshop layers 6:20
58 Gizmos 6:30
59 Custom Gizmos 6:35
60 Show/hide gizmos 6:37
61 Show/hide gizmos in game view 6:40
62 StringBuilder 6:42
63 ScriptableObjects 6:52
64 Scripts changes while playing 6:58
65 Custom Windows 7:06
66 Custom Inspectors 7:15
67 ToolsV 7:27
68 RectTransform in 3D 7:31
69 Snapping 7:37
70 Snapping options 7:41
71 Vertex grab 7:44
72 Manages Assemblies 7:49
73 WaitForSeconds & TimeScaleV 8:00
74 Cash variables 8:10
75 Never use Camera.main 8:17
76 Performant non-changing strings 8:23
77 Range attribute 8:30
78 Space attribute 8:39
79 Header attribute 8:41
80 Tooltip attribute 8:43
81 Asset Store in Editor 8:46
82 Merge scenesV 8:50
83 Duplicate 8:54
84 Duplicate array items 8:57
85 Editor Presets 9:00
86 Iterate over child objects 9:07
87 Change object order in Hierarchy 9:11
88 Save selections 9:16
89 Regions 9:24
90 Pause Editor through code 9:31
91 Frame Skip 9:38
92 Stats window 9:42
93 Profiler 9:46
94 Measure function in Profiler 9:48
95 Undocking the preview 9:53
96 Mute your game 10:00
97 Invoke Repeating 10:05
98 Frame Debugger 10:10
99 Physics Debugger 10:15
100 *DON'T MAKE AN MMO RPG* 10:20
Took me about 15 minutes.
You are legend.
my hero
You're an animal! Wait, no...you're the GOAT!
God
True hero
These tips really helped to speed up production of my new MMORPG.
Edit: This was meant to be a joke about what he says at the end. I'm not actually working on an MMO.
😲😲😲 😅😅😅
Except for 100
@@cookiesrgood1802 especially 100
same actually
So you finished it then. Congratulations.
#100 isn't as much of a tip as it is great life advice.
Are you sure you don't want to make a science based, 100% dragon MMO with the rest of us?
Very great tutorial video I wish I can make some kind of this tutorial on my channel.
I might.... completely forget about tip 100 xD
Why not? o.O
@@0nsterion try to make))
Tip 101: If you add code you want to delete later, don't forget to actually delete it later
word.
My own advice for that, before the line you're planning to delete later, add comment "// TODO : Delete", and before the end of your project, go through all of your "TODO"
yeah its not really a tips is just a good way to work
Mark it with // ToDo so it reminds you everytime you inspect your code.
[Obsolete("Method1 is deprecated, please use Method2 instead.")] sounds better to me because it creates a warning for you in the editor. But honestly i've never used it.
I noticed that you have more subscribers than unity themselves. Congrats
Same for every company actually
That might be because his tutorials are more updated than Unity's.
Mohammad Nadeem no
lol
its cause he is more dedicated by himself than all the ytb unity team
Awesome video, TIP 3 was a great discovery ! And those bloopers at the end... they really made me laugh ;D !
I actually spent a full day to code a component that would do the exact same thing, but asked a ton of resources instead xD This is a major tip !
Blackthornprod and Brackeys should do a collab together!
Totally
your my dad
Blackthornprod! I've watched your videos before and they were great! Keep it up! I agree.
Who let the chickens out at 10:54 cracked me up LOL
dont fucking lie, you didnt even grin
@@KarlooAudi whats wrong with you
@@imnotasher4892 I hate fake comments :)
@@KarlooAudi not a fake, i laughed on that too, hopefully you watched this video with audio On
@@BurhanuddinKalawadwala I didn't watch lol, ignore me im idiot
Tip #100 Don't make an MMORPG is just his way to say: "Don't start with a big project right out of the gate."
I think this video is by far the most valuable video! Great job and thanks for sharing it with the world!
TIP #3 made my life A LOT easier. I was checking every once in a while for all the objects and organizing them depending on their Y values, this saves me from a lot of performance issues. Searching all objects, accesing their transforms and comparing them, sorting them, and changing their sorting order
I have another tip! similar to #24 (Ctrl+Shift+F alight to view), you can press Ctrl+Alt+F to move an object to the focus point of the scene camera. You can also middle-click on any 3D object to focus the camera on that point. This is useful if you wanna place an object on a table or the ground, you can middle click on the spot you want then with the object selected, you can hit Ctrl+Alt+F to place it there.
Tip 37 was a big joy to see. When I went to use it, got errors. Remembered tip 31. Got tip 37 to work! Learned a few things. Best tutorial channel ever. Always learning something. Start putting them in my credits.
I always like to watch those "100 things you didn't know about minecraft" videos even though I don't really play minecraft anymore because I just find them really interesting, and with these videos I get the same thing but I'm actually learning useful things too! Thank you for making them :D
info for me:
8 Random boolean 1:22
19 HideInInspector 2:23
21 Folder shortcuts 2:33
25 CompareTag function 2:50
35 Tinting the editor in playmode 3:54
40 Locking layers 4:23
50 Locking the inspector 5:17
51 Inspector debug mode 5:38
58 Gizmos 6:30
62 StringBuilder 6:42
77 -80 Range attribute 8:30
86 Iterate over child objects 9:07
89 Regions 9:24
90 Pause Editor through code 9:31
91 Frame Skip 9:38
I got another string concat Tip, better than concat and more concise than string builder for when you want to just concat parameters.
In Unity versions 2018.3 or newer , you can now use interpolating strings, no more slow GC alloc string concats, nor lengthy StringBuilders.
just add the '$' symbol before your string and you can add the variables you want to concat to the string between '{}'
Example:
var userName = "Bart Simpson"
var age = 99;
$"Hello World, my name is { userName } and my age is { age }"
I saw this one on a BoardToBits video, use it all the time now. Makes me wish we had it in Java/Android.
@@mandisaw Java kinda has it with MessageFormat.forma/String.format
Thanks for the tip on the tip.
@@Pcat0 Yeah, they both have String.format, and I use it, especially for display-localized templates. But it's got many of the issues of old C-style printf, and format''s not as clean/legible or null-friendly, even if $-notation is likely just syntactic sugar.
@@mandisaw So why not use Kotlin for Android?
9:38 I swear to god its like this button never existed before
_BRING BACK THE _*_C# CODING TUTORIAL_*_ SERIES PLEASE!!!_
*cough* not using properties *cough*
yes
yes
sey
Gets my vote
number 100 should have been number 1 I think....
CLEARLY the most time saving tip of them all.
Tip #101: You can use multiple canvases to increase performance while animating them
If we could have at least 10% of the level of excitement and enthusiasm you put into your videos, we'll be for sure better developers!
Im literally loosing my mind just at the debug mode in inspector. That is going to be so useful. Thanks for all the tips and everything you do generally, but that really blew my mind.
My mind was blown at least 20 times in this video. Thank you!
Tip 50: Instead of copy-pasting each field manually after locking inspector, instead Right-Click on the component gear with your desired values, select Copy Component, then on the other component inspector, Right-Click on the component gear and select to Paste Component Values
protect brackeys😤
Person: Finally after 3 years of work on my MMO RPG i can release it!
*Person watches video*
Person: F*ck...
Whoa, AssemblyDefinitions blew my mind! FINALLY a way to reduce compile times, and a way to manage dependencies. Thanks for the great video!
00:47 It's only on tip number 3 & I already learn something very useful!
Nice video as always, good work!
*_at _**_10:54_**_ i swear i heard a chicken_*
same
Funny
Each bit of online MMO-discouragement makes me want to make one even more.
One tip i think is important is using indexors when you have a class that has an important array or list variable in it, like a dungeon generator or something. You can then create an indexor in that script so that other scripts can access that array or list indirectly by just using the name of the variable they id'ed that class with
Its the first time I reduced the playback speed. Cant keep up.
Same! Because you have to think at least for a while to understand what he's saying and remember it (if you can).
@@tonziss not only that, but it also sounds like he's still talking on the same tip since there's no indication (sound, highlight, etc.) that he's actually on the next tip already. Thus, you'll have to continuously check on the lower left to see if we're on the same page. Even then, I, at least, lose concentration on what he was saying by doing so.
@@DEATHFIRESS yeah, that too. And I also lose my focus when i start thinking about a tip that i find very helpful in my situation and when i come back to reality he's already two tips ahead... : P
tremble in fear before me mortals, as I watch my videos in 2x speed \*lightning crack*
i rewatch this, and a couple similar videos, everytime i start a new project, because sometimes they have nice tips, but i dont need them at that moment. so its better to find them and use them during a project that requires them to get used to them.
Bet Next year is gonna be a 1000 tips. Great Video btw.
Still waiting
Still waiting
This didn't age well...
"Destroy(gameObject)" works after an update loop. Sometimes we need to use "DestroyImmediate(gameObject)" so that our code do not reference to that gameObject before update loop is finished.
5:28 At first i thought he said "That calls for a civil war" and i was like O.O
Huh... Didn't notice that before.
Awesome video! Being a decently strong Unity user I thought I would know the majority but there were actually a lot that I was completely unaware of. This vid was a great start to 2019 I can't wait to see what this year brings for the Brackeys channel :D
90(9:35) It's better to use Debug.Break to avoid compilation error while building(because of UnityEditor namespace)
Literally the best unity video I have seen to the day
I'm definitely making an MMO RPG now xD
Reverse psychology level GOD
Good luck with that!
How can these guys be so silly and nerdy and awesome at the same time??? I am so impressed
100 tips :D I think this year is going to be goooood :D
It's very hard even for a team of 100+ people, too much coding, need server maintenance (bc you expect for a lot of people to join), animations and characters, quests, story aaaand, it's too much expensive to be done in a short time of (
@@EVOKZH I don't think Mehmed was talking about the 100th tip.
Dude you are the best, I've been following your videos and learned so much. You're courses are better than university courses.
I thought i knew everything there was to know in unity...
Until i saw this video😂 You’re awesome Brackeys!
Exenerate making games is easier than you think...check out this tutorial on unity by udemy
@@rohithvishwajith4988 damn mate, you are right.
You're the best! Somehow I haven't seen any of your 2019 videos... I'm subscribed to your channel, but they haven't shown up in my recommendations. I'm stoked to see how many videos are available to me! hahah
please explain the ECS and job system in more depth
I want to know *Pure ECS* but I think it's still in preview.
9. Struct instead of class 1:26
35. Color debug log 3:54
87. Sorting child in inspector 9:11
62 and 76 are wrong!
The examples and reasons are false.
62. When concatenating string literals they are compile time optimized to just one string! (I.e does not create a single string)
76. This might actually be worse than before! *If anything you should use ' const string a = "asdf" ' if anything!* static readonly is going to potentially make loading the variable slower than const.
It also never creates a string! All string literals are contained in the compiled result. So passing in a string literal directly has no performance cost other than passing a pointer.
YESSSSS
Finally someone who understands compiler optimization
stackoverflow.com/questions/21644658/how-to-use-stringbuilder-wisely
you are correct untill concatenations of sise 8, but not sure how runtime concatenation comes into play.
what would happen if they were not literals? would the tip still hold true?
@@naru2906 Which one of the tips?
54 tip the best tip!!! I jumped out from my chair, seeing how plotting variables is possible in unity!
This is my new bible.
thePLAYMODE tint is probably one the most helpful tips i'll ever get for unity
I’m pleasantly surprised by how many of these I already knew
One of the funniest videos of the channel!
#76 won't allocate mem, it will create a literal once and use it, so not every frame just once. Still you can save tiny bit of memory if you use the const, you should do it.
#97 says "on deactivated game objects" but the video is deactivating a component, so not sure if true or just wrong example
Deactivating a gameobject will also treat all deactivatable components as not enabled so it works the same.
Using a string literal directly is the same as creating a const, they all get put in the assembly string table.
This video is actually awesome, as are all the others you do.
Congratulations @Brackeys, keep the awesome work x)
I'm really considering of starting supporting you on Patreonnnnn
Literally paused the episode several times to re-write some code. I'm new at this.
note that StringBuilder is only useful if you have an unknown amount of inputs, otherwise $"" strings (string interpolation) is a cleaner method for concatenating strings as it does not need you to instantiate a StringBuilder.
Couple of these had me saying "How am I just finding out about some of this stuff just now!?". Also on a side note of the mmorpg tip, only if you know what you're doing ;) But ya most people shouldn't touch that, even single player rpgs are very very complicated even for advanced game developers
Great video, I am eagerly awaiting the 1000 tips video!
Wait, you can merge scenes XD
Right!? That was the most surprising one to me.
@@beardordie5308 so for seemless loading screen would be level 1 loads when near border of -> level 1 & two merged -> load scene 2 when end of lvl 1 & two merge , unload lvl 1 lvl 1&two when distance great enough that don't see lvl 1, this is *mind blown*
This lets you load parts of a scene (I.e. different regions of a big open world) seamlessly without having to pause while loading or consume lots of memory
Well well, who do we have here. Haha.
I didn't think I would use so much of these tips! AnimationCurve is already a life saver!
#74 should be "Cache variables" rather than "Cash variables" btw
Cache is pronounced like cash.
@@TheSpacecraftX But it is not typing like that.
Yep, I checked comments to call this out as well. Hopefully it's an easy fix, or someone may forever be misspelling it after watching this awesome video.
@@TheSpacecraftX cash yo variables. how bah dah
@Milan Stevic Cache me outside. How about that?
Reminds me of the old Tips & Tricks live sessions the Unity Learn guys used to do. I've been using Unity for ~3years, and some of these were even new to me. Scene merging!!
Спасибо! Хорошее видео.
@@regtrgrth7907 Brackeys is a best teacher of a ever seen!
This video is a masterpiece. Learned a lot in a short time.
Tip #100? Challenge accepted! Hold my beer!
I really dont know what could i do without u
I believe its caching and not cashing?
Caching is pronounced cashing.
@@TheSpacecraftX yeah but he spelt it as cash
@@TheSpacecraftX Why do you keep saying that?
@@TheSpacecraftX Can you not comprehend that it's spelled "cache"? Get that through your thick skull.
@@rodbot can you not see than I spell it cache. I obviously didn't notice that he wrote it as cash. If it didn't know it was spelled cache I wouldn't have written caching would I. Can you get that through your thick skull?
Not sure if you'll ever see it, but we definitely need more Brackeys on youtube.
Good news he's back :)
16. is just a myth!!! :D Math.Sqrt() is even faster than dividing. Of course it's slower than multipling but not that much. A 100.000.000 iterations of Math.Sqrt() on my i5-6500 takes 596ms (double) which is faster than 100.000.000 iterations of dividing which takes about 700ms on doubles. Multipling takes about 350-400ms. So you should be more scared of dividing in your code than of calling Math.Sqrt() :) From what I read it's implemented in x64 hardware that's why it's so blazing fast :D But never use Math.Pow()! It's 5-6 times slower.
You can test it on your own CPU:
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
double x = 0.0;
// iterates 100.000.000 times
for (double i = 0; i < 1e8; i += 1)
//x += Math.Sqrt(i); // Uncomment to test Sqrt
//x /= 0.1; // Uncomment to test dividing
sw.Stop();
Console.Out.Write(sw.ElapsedMilliseconds);
Console.In.ReadLine();
}
}
PROE yeah, but running this code with vector3 makes it at least 3 time slower. running this actions in update takes frame time depending on power of your device. if you run it on mobile, in update, and many times (for example, for calculating path to many enemies based on distance between tiles) you could easily loose 5 fps on that. 30 fps for mobile is most commonly used standard. so even 3-5/30 - it's not few.
@@SerhiiZhydel My point is that it's not REALLY slow as Brackeys said. If you're not targeting mobile device and don't have milions of vectors to calculate per frame then you can freely use it, it's lightweight... Dividing is more resources demanding. It's just a myth that it's "really slow" and that was my point.
“Dividing” not diving.
@@ethancheung1676 Typos, I was so tired that half of the words were written properly and half not :d Edited, but everyone probably knew what that meant after getting to the end of my sentence where words were correct.
PROE i appreciate much of your findings anyway
why we should not do an MMORPG? :D
People repeat this due to the sheer amount of work involved. Most of the time when the average person tries they get discouraged and quit and it’s better to start small and actually complete something.
Oh and uh
I don’t listen :P
It's way way way to high level for beginning designers or even intermediate designers if they don't have a team of 20+ people. It's also an oversaturated market so even if you do everything right it still could fail in the long run.
Start small, as small as you can think. One of the first projects I actually succeeded with was recreating asteroids, which made me better understand and grow my skills which helped a ton with my later work.
Incredibly useful! Keep going!
i really don't understand nr. 100 (seriously)
I'd guess it's impossibly hard, unless you have a team of 100 people at least. Which will still take like 5-10 years. Based on how much it took other MMOs. And then, there's still like really small chance it's going to be picked up by anyone. Oh and not forgetting, you also need a huge budget.
It's not "hard" but just too much work to do.
@@astral2048 That's a really shitty attitude.
korean reply passing through~!
Your every video makes me happy and helpful. I really thank you!
Oh please just stop suggesting to not make use of square roots already, modern CPUs will handle millions of square root operations before dropping the framerate
i thought this video would just tell you stuff you would never need or is stuff that everybody like "Ctrl +S saves stuff". But i learned way more in this 11 min than i did while reading documentation. Thank you very helpful
I don't agree with Tip no. 100 , i do a MMORPG but a 2D one even if i have to go through hell TWICE.
Great video mate, really sold collection of tips! ♥️
What's the joke with #100?
It's less a joke and more just game design advice, mmos are games hard to code in a over saturated market (if you haven't noticed the fast amount of mmos coming out recently) they are basically not at all worth the time and effort considering WoW is still the largest mmo out there and it's like 20 years old.
The closest thing to a joke could be the amount of mmos that fail but I'm pretty sure this is just pure advice.
It has absolutely nothing to do with the MMO market being over-saturated. MMO's are about the hardest type of game to make.
Every new Unity developer wants to create MMORPG he knows (ie World of Warcraft) but better! - Of course the scope is too large to be finished by a solo developer (when usually companies with 100+ devs work on it for 4-6+ years)....
@@shadoninja that's why I said both, it's not worth the time and effort because in the end you'll have worked so hard on something for so long that it won't really be worth it combined with the fact that it's in a over saturated market (there's like at least 5-10 mmos coming out a year) that making one just won't really get the value you put in.
Actually these tips gonna save me a lot of time in the future. Thanks, Brackeys!!!!!
1st
Your first congrats
you are responsible for the 60% knowledge I have of Unity!
Awesome Tips.......Helps a lot for Unity Developers.....Thank You!
Wonderful video! It also works as a self Unity test. It seems that I know 90 out of 100 tips. All thanks to your previous and precious videos👍
Happy New Year Brackeys!! 😊
Re the one at 1:38, since Unity 5.3, instead of:
"yield return StartCoroutine(SecondCo());"
You can just do:
yield return SecondCo();
And it silently calls StartCoroutine for you. Instead of silently failing like it used to!
Such a useful video! Love it
Tip 3: 0:53
Tip 23: 2:44
Tip 71: 7:48
very good tips
Pixel perfect camera, what a god send. Thanks.
Please, never stop making these videos.
your positivity is contagious :) thanks for the great tips!
SO....MUCH....FREAKING....INFORMATIONS........I love it!!!
nice video :) , the final was the best tip
Thank you for this video! amazing work!
My personal tips...
CTRL + p Plays your game, and hitting it again ends the session
CTRL + SHIFT + P Pauses your game, and hitting it again continues the session
The profile will also have A LOT of overhead if your scene is incredibly complex with a lot of objects and a lot of scripts.
Amazing video!! Keep up the awesome work!
This is 100% my favorite video ever. ❤❤❤
2:00 That's smart. There should be static methods in Vector3 that do exactly this.
Vector3.DistanceGreater(pointA, pointB, dist);
Vector3.DistanceLower(pointA, pointB, dist);
Vector3.DistanceEqual(pointA, pointB, dist, tolerance); // of course with a tolerance because it's float and not int.
I love this video. Learnt so many new things. Thank you so much
As always.. Great Tutorial and Thanks Very much Brackeys!!!
7:43 That's the tip I've been looking for longtime! Thanks