[Unity] Procedural Cave Generation (E01. Cellular Automata)

  Рет қаралды 311,691

Sebastian Lague

Sebastian Lague

Күн бұрын

Пікірлер: 369
@GMLscripts
@GMLscripts 9 жыл бұрын
This is a good technique but there is a problem with implementation. Cellular automata rules should be applied in parallel. This is normally achieved with a second array. When each cell is processed, it uses the current state of surrounding cells to determine its new state. As each new state is calculated it is stored in a second array. When all cells are processed, the second array becomes the current state for the next iteration. Because you are altering the current state as the iteration runs, the unprocessed cells will not have access to the true current state of the already processed cells. This results in a strong diagonal bias in your maps.
@KevinUchihaOG
@KevinUchihaOG 4 жыл бұрын
When you say "next iteration" what part of the code are you talking about? Next iteration of "smoothmap"? (he only do smoothmap once... so i assume not?) Next iteration of the for-loop inside the smoothmap-function? (if so which one, there are 2 nestled for-loops) Or what do you mean when you say "iteration"?
@Dasfrozentoast
@Dasfrozentoast 4 жыл бұрын
@@KevinUchihaOG I assume he means the nested loops inside the smoothmap-function that iterate over the whole grid.
@glebgrozin6872
@glebgrozin6872 4 жыл бұрын
@@KevinUchihaOG He is describing how you would have to do it and he is right
@goodboiadvsp3297
@goodboiadvsp3297 4 жыл бұрын
I knew there was something wonky in the generation.
@nikosaarinen3258
@nikosaarinen3258 4 жыл бұрын
That's true, but when I tried to implement that I found that Sebastian's method just looks better
@isaacsurfraz3858
@isaacsurfraz3858 9 жыл бұрын
Unity Should hire you! Best most informative tutorial series they have, I seriously hope they get you to do all their tutorials from now on.
@SebastianLague
@SebastianLague 9 жыл бұрын
Isaac Surfraz Thanks Isaac :)
@arnzzz1
@arnzzz1 9 жыл бұрын
+Isaac Surfraz They are so good, it was trivial implementing this in LibGDX.
@gamblorish
@gamblorish 7 жыл бұрын
Marching Cubes
@BlazertronGames
@BlazertronGames 6 жыл бұрын
Well, they featured this tutorial series on there website, on the learn section.
@jvcouk
@jvcouk 9 жыл бұрын
Improvement suggestion: The smoothing function should really write to a new copy of the map, switching 'source' and 'destination' between each iteration (standard practice for cellular automation). As-is, it writes to itself, effectively 'corrupting' the original before the job is done. You can see this in the video, where the bottom/left of the map is more 'wall' than the top/right.
@AaronStyles
@AaronStyles 9 жыл бұрын
+John Valentine Came down into the comments to say the same ;)
@nickngafook
@nickngafook 9 жыл бұрын
+John Valentine Hey. By "between each iteration", do you mean write all of the new values from the smoothing method to a temp array, and then completely overwrite the map[] after both for loops are complete, or after each inner for loop is complete? I replaced map[] with a temp after both for loops and it was generating even borders as you pointed out the original code was not doing, but there was substantially less "walls" inside the "cave". Thanks!
@jvcouk
@jvcouk 9 жыл бұрын
Don't overwrite values from the previous iteration; before starting the new iteration, make a new grid and write results into that. Yes, it will change your results, and you might have to rebalanced your algorithm for that. But at least it will not be directionally biased.
@jvcouk
@jvcouk 9 жыл бұрын
It's possible to do it using two grids, and alternating between iterations by swapping the references.
@aislanarislou
@aislanarislou 8 жыл бұрын
+John Valentine I can't see this "corrupting" in the video. What minute of the video I can see this "bad" effect into the map?
@monsieurouxx
@monsieurouxx 6 жыл бұрын
*Things to do for this to work in Unity 2017* : 1) you can't drag&drop the C# file onto the game object if you haven't renamed the class in it to "MapGenerator" BEFORE you try. 2) You need to click on the little gray tab that says "gizmos" for them to be rendered. 3) you need to fill the "width" and "height" fields of the MapGenerator (in the right pane) BEFORE you press play 4) When you click "play" you can't change the view to top AFTER you click play. Also, you can't change the camera view to top by just clicking on the camera's gizmo. That will only change the preview camera's rotation, not the actual in-game camera's rotation. That's because after clicking "play" you're now in "game" view. So after you click play you need to click on the "Scene" view tab (above the scene window). *Phew!*
@subzeroelectronics3022
@subzeroelectronics3022 4 жыл бұрын
RIP John Conway. I’ve gotten into his Game of Life, and it’s the most interesting cellular automata I’ve ever seen. Another great mind claimed by COVID.
@Khornel555
@Khornel555 9 жыл бұрын
Cool video, looking forward to episode 2! Change is generally applied simultaneously for cellular automatons, you can do this by storing a temporary clone of the map to read from when smoothing(Array.Clone() works for value types in this case). You get some pretty cool results, but it requires more smoothing iterations to look good on average, though.
@alderin1
@alderin1 2 жыл бұрын
Must-watch series for Unity beginners. Everything still works in Unity 2020lts! Solid code, solid explanations.
@antoniomangoni9719
@antoniomangoni9719 2 жыл бұрын
Nothing shows up in mine, did it work from the start? Or only by the end of the video?
@nicholaslabrecque
@nicholaslabrecque 4 жыл бұрын
for anybody that is wondering (probably not many) but the "if else" statement he is using is called a ternary operator.
@nerod-0
@nerod-0 6 ай бұрын
Thank you! This was very understandable, i could generate rooms for hours, they just look so good!
@chimeforest
@chimeforest 4 жыл бұрын
Something worth taking note of: Because the code is editing the map as it's iterating through the map, it's skewing the final results. That's why the cave's tunnels almost always run from lower left to upper right. It's especially noticeable @20:35 when he changes the
@rodrigo98silva
@rodrigo98silva 3 жыл бұрын
thanks for this!
@chimeforest
@chimeforest 3 жыл бұрын
@@rodrigo98silva You're welcome, I'm glad someone found it useful ^^
@angelorf
@angelorf 4 жыл бұрын
You should update the map after smoothing all cells. When you update each cell like this you get diagonal structures.
@BrandonDyer64
@BrandonDyer64 9 жыл бұрын
Thank you for the tutorial! You helped me out a lot! In short the tutorial is: Conway's Game of Life with rules: n > 4: born, n < 4 die, n = 4 remain.
@KevinOsterkilde
@KevinOsterkilde 4 жыл бұрын
This is how the game "Worms" got started. Lovely work.
@joo_nath
@joo_nath 6 жыл бұрын
Just to let you know, this series still helps people 3 years later.
@survival_man7746
@survival_man7746 2 жыл бұрын
7 years later still helps
@BrainRobo
@BrainRobo 9 жыл бұрын
Thank you, love your tutorials truly innovative and explanatory. Going to use your cavern system for a worms like game.
@2001herne
@2001herne Жыл бұрын
For anyone who (even though it's many years after the fact) tried this, and realised the issue about overwriting the grid as it's being used, simply fixing the step function results in horrible caves. I found some success by changing from a 3x3 scan to a 5x5 scan and using values of 12 for thew thresholds instead of 4. I also bumped the fill percent up to 50.
@thenoze5767
@thenoze5767 7 жыл бұрын
"Sebastian Lague started out ambitiously making games with AppleScript when he was twelve. He had considerably greater success two years later when he discovered the Unity engine and has been engrossed in game development ever since. He loves participating in game jams with friends and has a growing passion for teaching game development at all levels." This guy is me but with two years head start! I'm only up to the "two years later discovered Unity" bit but it's only inevitable.
@Daniel-ch9jf
@Daniel-ch9jf 9 жыл бұрын
Great tutorial! I'm just starting to dig into procedural generated levels in games, so I'm glad I came across this. Hope I can learn enough from this series to make my own procedurally generated levels.
@supercables251
@supercables251 8 жыл бұрын
Can't find the "Like all in this playlist" button.
@morphman86
@morphman86 9 жыл бұрын
I've been searching, looking and asking around for good explanations on several things that you covered in the first 5 minutes of this video. Mainly, I've wanted to know how people get those sliders in the editor ([Range x, y]) and how to make your PRNG dependent on a seed. I had given up on both those long ago, and now I just stumbled on your vid and it explained everything. Thank you!
@Matthewsaaan
@Matthewsaaan 9 жыл бұрын
Fantastic tutorial, really easy to understand. I've used this as a base for island generation instead of dungeon generation, it's really doing the trick for me so far! :-)
@yannicktraore8559
@yannicktraore8559 7 жыл бұрын
Thank you Sebastian. You raise pedagogy at its finest.
@sukram1998
@sukram1998 9 жыл бұрын
Appreciating your tutorials as much as possible! You explain it very detailed and you are chosing your topics wisely. There is no other place to find better explanations.. Keep going and looking forward for the next episodes! :)
@MiikeLefebvre
@MiikeLefebvre 7 жыл бұрын
Hey man, i really enjoy the way you do your videos. Lots of information and you almost always use the Gizmos to show us what the code is actually doing. Much appreciated.
@zovo9302
@zovo9302 6 жыл бұрын
6:24 I love that bah so much
@videomasters2468
@videomasters2468 9 жыл бұрын
a tutorial on procedural race track generation using bezier splines and then making a mesh from those splines would be awesome :) Great video as always
@montetribal
@montetribal 9 жыл бұрын
That was a great tutorial! Can't wait for the next one. Subbed. And now to dig through the rest of your tutorials because they seem interesting. I guess going past 50 on the fill% gives a decent early final fantasy "World Map" kind of feeling. Then for turning this into a 3D model you would just change it so instead of making the black into walls, the black becomes water areas and the white stays as a walkable landmass.
@ItsAlienMoose
@ItsAlienMoose 9 жыл бұрын
Awesome topic to start covering, cannot wait for more videos in the procedural generation series.
@qizzz6201
@qizzz6201 6 жыл бұрын
This is the 2nd time I learn the tutorial, everything is so simple as you explained, and everything is so beautiful as the outcome, thanks again for the lesson ;D
@dnoldGames
@dnoldGames Жыл бұрын
Amazing Video, it was really easy to grasp the concept after watching, to the point that I was to implement it in my game. Thank you really much this is as useful as ever even if it is 8 years old!
@newbquesttv
@newbquesttv 9 жыл бұрын
Great tutorial! Just checked out the first bit and really enjoying it. Nice clear explanations as well. Looking forward to the next part! Well done!
@antixdevelopment1416
@antixdevelopment1416 11 ай бұрын
Super late to the party here but when you are getting the neighboring cells you can initially set wallCount = -map[gridX, gridY]; instead of wallCount = 0; which will enable you to skip extraneous checks during the loop.
@TimoKek
@TimoKek 4 жыл бұрын
if youre using 2d view and are only getting a line use : Vector2 pos = new Vector2(-width/2 + x + 0.5f, -height/2 + y+0.5f); Gizmos.DrawCube(pos, Vector2.one); or: Vector3 pos = new Vector3(-width/2 + x + 0.5f, -height/2 + y+0.5f, 0); Gizmos.DrawCube(pos, Vector3.one); instead of : Vector3 pos = new Vector3(-width/2 + x + 0.5f, 0, -height/2 + y+0.5f); Gizmos.DrawCube(pos, Vector3.one); this fixed the problem for me
@ChaoticNeutralMatt
@ChaoticNeutralMatt 3 жыл бұрын
Marked this so I could come back and check this again. Glad this was here.
@lionsites6343
@lionsites6343 2 жыл бұрын
Thanks so much man! Sebastian needs to pin this :D
@arnzzz1
@arnzzz1 9 жыл бұрын
This was brilliant. Thanks for making these videos. Ive been messing around with room based dungeon algorithms for a couple days, and im not happy with them, as they are based on rectangles and maze like corridors. I wanted something more like Nuclear Throne but more organic, and this is pretty close imho :) Ive implemented this in LibGDX, and im really liking the results so far. Im going to make an XML parser now, to output TMX files so i can use LibGDX's TileMap classes :)
@REXanadu
@REXanadu 9 жыл бұрын
How stupendously convenient! I'm working on a roguelike dual-stick shooter, and I've been having a hard time figuring out how to create a procedural dungeon generator. I know it's not exactly the same thing, but I know cellular automata can be used for creating random dungeons in a sense. Now, I just need to figure out how to layout different objects (e.g. enemies, dungeon entrances and exits, objective objects) around in the level properly.
@BastienGIAFFERI
@BastienGIAFFERI 9 жыл бұрын
This is just awesome ! Keep posting that kind of stuff, totally interesting.
@trevyskorner5952
@trevyskorner5952 9 жыл бұрын
I found 50% fill gave me the best looking caves. Also, 100 by 100 maps are excellent. Now if only we could join the islands, with minimum computation.
@wolfulusss
@wolfulusss 9 жыл бұрын
I like the idea. The only problem here is that your "filling percent" is wrong. Its actually a filling "chance". You don't garantee for example that by setting 45%, 45% of the map will be filled. Initializing the proper values and then shuffling the array is a a solution, but there are better and less expensive ways to do this.
@ericsailer9791
@ericsailer9791 9 жыл бұрын
Your Tutorials are the Best I've found so far.
@haachamachama7
@haachamachama7 4 жыл бұрын
I was looking for a tutorial on rogue-like map generation... I found a fun way to make worms levels randomly generate! lol, amazing tutorials, as always.
@HelplessProcrastinatorChannel
@HelplessProcrastinatorChannel 9 жыл бұрын
_That moment you think, How could something be more epic than this?_ *+1 Like **Sebastian Lague** *
@thelinkingtinker6974
@thelinkingtinker6974 9 жыл бұрын
Wow, This is so cool! It reminds me of John H Conway's game of life. :)
@aranlong5885
@aranlong5885 9 жыл бұрын
It's a very small optimisation but instead of checking if neighbourX != gridX || neighbourY != gridY you can initialise wallCount to -1.
@antondeluca1984
@antondeluca1984 4 жыл бұрын
Time.time.ToString() returns 0 at the start of each game so if you want a truly random seed, use DateTime.Now.ToString(). Just something I thought I'd share
@jorisslagter
@jorisslagter 9 жыл бұрын
Wunderfull tutorials. I've watched also your PathFinding A* video's. I would love to see more from you. Can you for instance give a tutorial about the systems behind Prison Architect, RimWorld or other simulators about the items, stockpiles, picking items up and dropping them of, working at workshops and producing items from the stockpiles and creating new items with them. For example, I'm trying to create a worker that chops down a tree, picks up the log and bring it to a sawing machine. There the log will be turned in to wooden planks. The planks need to be picked and bring to the assigned stockpile. With the wooden items you can build new structures. I hope you can learn me how to do this at a scalable way. I am also interested how to combine this with the A* PathFinding algorithm.
@Chubzdoomer
@Chubzdoomer 8 жыл бұрын
+Joris Slagter What you're talking about in regards to the stockpiles... Isn't that just a simple case of dealing with variables and conditional statements? An example regarding the tree process you mentioned: - Worker chops down tree (tree could have its own "HP" and when it reaches 0, it's chopped down) - Picks up the log and brings it to a sawing machine (the log could just be represented as some sort of variable on the worker) - The log is turned into wooden planks at the sawing machine (if log is present at the sawing machine, then create 'x' number of planks) - The planks need to be picked up and brought to the stockpile ('x' number of planks are placed somewhere near the mill, which the worker can come and collect; once they're collected, like the log they're represented by some sort of variable) It just seems like a collection of very basic operations to me. The most difficult part would be the pathfinding and animations.
@personthehuman1277
@personthehuman1277 4 жыл бұрын
Wait... This guy makes ai tutorials?! I'm watching them as soon as possible!
@k0ded265
@k0ded265 4 жыл бұрын
Stockfish in the bottom bar. nice :D
@YassinTheDestroyer
@YassinTheDestroyer 4 жыл бұрын
Hello, how to change the tile and make a tiles that close to water
@aarondhp20
@aarondhp20 7 жыл бұрын
Edit: Got it working, will update when I find the cause. Initially I couldn't get the UnityEditor to show ANYTHING when we first hit play around the 11 Minute mark. Turns out I had an extra letter "s" one of the "Gizmos" words. For those who may be stuck a, try getting the source code from the video description, then copy and pasting sections of his code over yours using ctrl+v. You can hold down ctrl and press Z or V to swap back and forth from your code, and his code. This will allow you to see any differences as the code shifts around. It's how I found my spelling error. NOW IT WORKS!
@SebastianLague
@SebastianLague 7 жыл бұрын
+Aaron DeWitt Hi, if you send me a download link to your unity project I'll take a quick look and see what's going on.
@aarondhp20
@aarondhp20 7 жыл бұрын
Hey Sebastian! Thanks for getting back to me so quickly! It ended up being a typo. I started using your finished code to paste over my code in sections to see where the error was, and I tried all the other suggestions for clicking on Gizmos in window and such. Do you have a patreon by chance?
@SebastianLague
@SebastianLague 7 жыл бұрын
+Aaron DeWitt Ah, glad to hear it. By the way, if you google c# code comparer you'll find sites that let you paste in two versions of the same code, and it will highlight any differences between them. Maybe will be helpful for the future!
@aarondhp20
@aarondhp20 7 жыл бұрын
What? Seriously?! Thank you so much, you've just opened my world to great new things!
@ChaoticNeutralMatt
@ChaoticNeutralMatt 3 жыл бұрын
@@SebastianLague lmao accidently put OnDrawnGismos (well and a small parentheses difference)
@Jonah9004
@Jonah9004 8 жыл бұрын
your chanel is a gold mine
@DZLier
@DZLier 7 жыл бұрын
calculating the neighbors while iterating through is what's causing the maps to be so bottom/left heavy. if you want a more even growth of walls, first iterate through and calculate the neighbors, then go through again and change the cells accordingly.
@ZeDlinG67
@ZeDlinG67 7 жыл бұрын
I've toyed with cellular automatons in the past, and for this purpose it might be good enough, if you want to create large maps, you only should have one array of vector2's, which hold only the "living" cells, and not a matrix of all cells. It is much faster (if that isn't enough for you, than look up *hashlife* )
@N7D7M7
@N7D7M7 7 жыл бұрын
Can you explain? I'm interested in your simplified version.
@ZeDlinG67
@ZeDlinG67 7 жыл бұрын
It isn't simplified, it is a different approach, I'll post a like to github when I'll get home
@teckyify
@teckyify 9 жыл бұрын
At 7:40 since you only need a binary array you should have create created a boolean array. I think you confuse conceptually the _calculation of the probability_ for the binary value with the _array value_. Or one could use a compressed BitArray, which will probably be super fast for the CPU cache.
@CodeforgesInsaneDevelopment
@CodeforgesInsaneDevelopment 6 жыл бұрын
Nice one , but the fancy if else is called ternary operator :D
@_evillevi
@_evillevi 8 жыл бұрын
Thank you! Very useful. I'm going to try generating platformer game maps using C#, Microsoft VS and Monogame.
@_evillevi
@_evillevi 8 жыл бұрын
I made it! Procedurally generated Rectangle caverns in Monogame. Thank you!
@paulrinaldi2209
@paulrinaldi2209 4 жыл бұрын
nice. -Wilford -Snowpiercer edit: If I got "Wilford's" name wrong, pls correct me
@etopowertwon
@etopowertwon 9 жыл бұрын
I have a feeling you want to make another array for map[,] during smooth() first and operate on it: right now when smooth smooths 2,2: map[1,1], map[1,2], map[1,3], map[2,1] us already smoothed and their values were updated, while map[2,3], map[3,1], map[3,2], map[3,3] contain old values. It gives noticeable / slash-like bias . E.g. at 20:04 all visible lines are /slash like and there is no \ baskslash-like lines. And generally right part of map is flattened and left part is emptiesh.
@stevenb4956
@stevenb4956 9 жыл бұрын
Really cool. Maybe you could show us how to add the ability to mine or something? Like destroy the wall and get the resources inside.
@nanapipirara
@nanapipirara 7 жыл бұрын
Thanks for the clear explanations. This is a great tutorial.
@titaniumdiveknife
@titaniumdiveknife 9 жыл бұрын
Love what I'm learning. Thank you Sebastian. You're very cool.
@brianchapman5173
@brianchapman5173 7 жыл бұрын
You would get better results if "SmoothMap" used a second map array generated from the first. Currently you are reading the map while the map while you change it. That is why the examples at the end of the demo are lop sided. I.e. the maps are fuller on the left than on the right.
@10chaos1
@10chaos1 9 жыл бұрын
this is really interesting thanks for showing us this
@VoxLightGaming
@VoxLightGaming 4 жыл бұрын
17:42 One thing I would say is that you really overcomplicated the "get surrounding neighbors" method. int GetSurroundingWallCount(int x, int y){ int wallcount = 0; // if we are not at the top of the map // check the northern tile if(y!=0){wallcount += map[x,y-1];} // if we are not at the bottom of the map // check the southern tile if(y!=height){wallcount += map[x,y+1];} // if we are not at the left of the map // check the western tile if(x!=0){wallcount += map[x-1,y];} // if we are not at the right of the map // check the eastern tile if(x!=height){wallcount += map[x+1,y];} return wallcount; }
@Gorgious
@Gorgious 4 жыл бұрын
This does not check for diagonal tiles and also does not let you set a higher radius to look for neighbors if you want a different smoothing solution
@jernejbeg
@jernejbeg 9 жыл бұрын
Love it! Will you also show us how to fill such an environment with detail, enemies or pickup items. I would imagine that this would be hard due to the fact that some of those stuff is design specific.
@batchprogrammer108
@batchprogrammer108 8 жыл бұрын
Hey Sebastian, this tutorial is awesome just like all of your other tutorials - just a tutorial request - could you make a tutorial on how to make a navigation mesh using A* - I watched your other pathfinding tutorial but I would like to know how to turn it into a nav mesh. Thanks :)
@evmaster114
@evmaster114 3 жыл бұрын
11:59 Unity says Operator '||' cannot be applied to operands of type 'bool' and 'int'. Please help
@raubana
@raubana 7 жыл бұрын
Oh neat! It's like Worms.
@SonOfNatureGame
@SonOfNatureGame 9 жыл бұрын
Hey, I don't want to sound wise or something, since your the master anyway ;) But I read somewhere that multiplying is faster than dividing. So I noticed that you used /2 a lot, also in you path-finding tutorial. So just to push that little bit of performance, it might be a handy tip to use * 0.5 instead of /2 :) It doesn't really matter but if you are using it a lot of times (e.g. path-finding) it might save you some time! Thanks for the great tutorials!
@soulwingcatshot9547
@soulwingcatshot9547 9 ай бұрын
doesn't it compile into the same thing regardless though?
@eweeparker
@eweeparker 9 жыл бұрын
Fantastic. One of my favorite Channels.
@masterjerom
@masterjerom 8 жыл бұрын
Hi, my creation, about half way through the tutorial, won't show. When I press the play button the total screen becomes slightly darker but that's it. I copied the script from the tutorial on Unity's website, which did work. After that my own script worked as well. When I continued by adding the walls the object again seized to show, as it now does with the copied script. I'm working on Windows and no errors were shown during the above. Does anyone recognize this and/or knows how to resolve it?
@fieryducks1
@fieryducks1 8 жыл бұрын
I have the same problem
@DevAnomaly
@DevAnomaly 9 жыл бұрын
I'm digging this, looking forward for more ^_^ Great work!
@deathbunny3048
@deathbunny3048 4 жыл бұрын
Diggy-hole? O.o
@OfficialFlashDrive
@OfficialFlashDrive 8 жыл бұрын
Whenever I run my game, the object looks like it only renders one row! I ended up copying and pasting his code into mine and it won't work! Please Help. Using the latest unity version!
@peterchow172
@peterchow172 4 жыл бұрын
Great video, learned a lot!
@lakhwani
@lakhwani 3 жыл бұрын
o really?
@MorseAmalgam
@MorseAmalgam 9 жыл бұрын
Hey Sebastian, absolutely love this tutorial series. One thing I was wondering about - Do you have any opinions on using this method of generating the "noise" for the map over, say, Perlin noise? While Perlin noise would still need some logic to close up and smooth the edges of the map, it seems like it would do the majority of the work for you. I'd love to hear your thoughts on the matter.
@tyridge7714
@tyridge7714 6 жыл бұрын
Hey Sebastian, I saw your tutorial on Cellular Automata for procedural cave generation, and I was wondering, what are the pros and cons of using an approach like this vs using perlin worms? Which to my understanding, is what minecraft uses.
@SpaceCaddy0307
@SpaceCaddy0307 8 жыл бұрын
I finally got this to work, thank you. My question is: How do I use my creation as a useable game item or feature? Everytime I click, it changes. And I really liked some of those maps. Thank you Sir. (I'll go back and erase all my other questions and pleas for help.)
@khatharrmalkavian3306
@khatharrmalkavian3306 4 жыл бұрын
Your use of spaces enrages me.
@JamesStaud
@JamesStaud 9 жыл бұрын
So for some reason when I run the basic OnDrawGizmos() explained at around 9:00 Unity won't display anything. I've tried re positioning the camera and I checked the settings. Any thoughts?
@deltaloko
@deltaloko 9 жыл бұрын
James Staud exact same issue...
@novaborn1906
@novaborn1906 9 жыл бұрын
+StepmaniaRocky MY MAN! (or girl).
@fieryducks1
@fieryducks1 8 жыл бұрын
I have the same issue and that didn't fix it
@josiahmortenson6062
@josiahmortenson6062 7 жыл бұрын
For me, I was using OnDrawGizmo() and not OnDrawGizmos(). Changing to Gizmos fixed the issue.
@iskalabat
@iskalabat 9 жыл бұрын
Anyone from UUC Computing class watching this?
@Destroyanad
@Destroyanad 2 жыл бұрын
If anyone is having any troubles, make sure you didnt miss-type anything. Mine was not working because a Y was an X by accident. Also make sure you have gizmos view enabled
@zokerino447
@zokerino447 4 жыл бұрын
Nice tutorials. Well explained.
@vaibhavpandey6640
@vaibhavpandey6640 3 жыл бұрын
hope i will be able to implement this in pygame within a week
@kevinvandijk4083
@kevinvandijk4083 4 жыл бұрын
Mine doesnt draw full cubes, and because of that i have lines showing up all over the place.. what did i do wrong?
@RaverTiny
@RaverTiny 9 жыл бұрын
Greate and quick tutorial. Thanks!
@tobenaigemu1612
@tobenaigemu1612 7 жыл бұрын
Really cool tutorial. Thanks!
@WannabeCanadianDev
@WannabeCanadianDev 8 жыл бұрын
Best British Accent on KZbin Award goes to...
@maxjackson7120
@maxjackson7120 6 жыл бұрын
I would like to see a followup on how to generate rooms instead of caves when a variable is set. Do you have something like that?
@gshlawg
@gshlawg 9 жыл бұрын
YOU ARE ON THE UNITY WEBSITE :D
@bezz432
@bezz432 9 жыл бұрын
simple yet awesome tutorial ty! :D
@Hadeks_Marow
@Hadeks_Marow 7 жыл бұрын
This seems very helpful. I am actually working on a 2D side stroller terrain generator. Is there anyway to implement this top down cave system to a side view cavern system with above and bellow ground level areas?
@personthehuman1277
@personthehuman1277 4 жыл бұрын
you can, instead of generating white and black cubes, where it would be white make a cube, and if it is black dont add a cube. then it would be like a cave in 2D minecraft!
@ScottAllanJensen
@ScottAllanJensen 8 жыл бұрын
Just in case it has not been said cellular Automata can also be used for terrain generation
@林筱然
@林筱然 8 жыл бұрын
非常感谢!终于找到资料啦。
@derekkaleida
@derekkaleida 4 жыл бұрын
Best way to add destructionto this? Just on the map grid level? And how would one morph the mesh smoothly to fit the new mesh with less verts?
@rzrx1337
@rzrx1337 8 жыл бұрын
GameObject (Map Generator) is not visible in game view nor scene view but the translation arrows are visible in scene view. I put a sprite in the same transform as the object and it was visible (in both views). I've made gizmos visible in game view, made all layers visible, made the camera orthographic and tested the FOV in perspective mode, tried changing the clipping planes and depth, restarted the program, deleted and created the object all to no avail.
@dabartos4713
@dabartos4713 8 жыл бұрын
are you actually moving the RandomFillPercent slider in Hiearchy to a value so there is anything to create?
@GoldFishBoy1337
@GoldFishBoy1337 7 жыл бұрын
I'm having the same problem.
@aarondhp20
@aarondhp20 7 жыл бұрын
I've set the height and width to 100 pixels each, I've set the RandomFillPercent to ~45, I've done all the things RazorX53 has tried, and the same issue. Nothing pops up on my screen. Well, guess I'm done with this tutorial series.
@rentox3969
@rentox3969 4 жыл бұрын
did you find a solution?
@adamarzo559
@adamarzo559 9 жыл бұрын
Hey is there any chance you can do a video on grid placement like in games such as Banished? Maybe I'm just dumb but I can't for the life of me figure out how I can get buildings to snap to a grid when being placed.
@Ginto_O
@Ginto_O 2 жыл бұрын
Do you think this algorithm was used in Worms to generate caves? They seems very similar
@taistingtheair1368
@taistingtheair1368 8 жыл бұрын
This looks like a floor plan but how would you make it 3D with varying floor levels, suitable ceiling heights and realistic cave surfaces? I also am wondering how you will implement the cave into the landscape with a sensible entrance? sounds like a lot more work to do.
@zolltf
@zolltf 7 жыл бұрын
There are 8 other videos in the playlist detailing exactly what you just said.
@Goombatastic
@Goombatastic 9 жыл бұрын
That was great!
@neuvampyrengel8653
@neuvampyrengel8653 6 жыл бұрын
Yes can you you this for an actual cyber planet or Procedural Planet ? Generate caves like this inside them?
@DeaMikan
@DeaMikan 9 жыл бұрын
Would doing this in 2D be roughly the same? If not what would I have to change?
@SebastianLague
@SebastianLague 9 жыл бұрын
It would be exactly the same, only you'd want to replace anything happening on the z axis with the y axis of course.
@MrIndiemusic101
@MrIndiemusic101 8 жыл бұрын
Sorry If you mention this later but I am curious what the triangle count on the generated meshes are meshes are.
[Unity] Procedural Cave Generation (E02. Marching Squares)
22:14
Sebastian Lague
Рет қаралды 191 М.
Coding Adventure: Ant and Slime Simulations
17:54
Sebastian Lague
Рет қаралды 1,9 МЛН
Family Love #funny #sigma
00:16
CRAZY GREAPA
Рет қаралды 62 МЛН
風船をキャッチしろ!🎈 Balloon catch Challenges
00:57
はじめしゃちょー(hajime)
Рет қаралды 84 МЛН
Cellular Automata | Procedural Generation | Game Development Tutorial
15:22
Building a REAL pawn that transforms into a queen (automatically)
14:12
Works By Design
Рет қаралды 2,2 МЛН
Coding Adventure: Atmosphere
22:00
Sebastian Lague
Рет қаралды 1,1 МЛН
I 3D Printed a $1,175 Chair
16:31
Morley Kert
Рет қаралды 3,4 МЛН
Coding Adventure: Procedural Moons and Planets
22:48
Sebastian Lague
Рет қаралды 1,7 МЛН
A new way to generate worlds (stitched WFC)
10:51
Watt Designs
Рет қаралды 540 М.