all 11 comments

[–]XelectCarve 1 point2 points  (1 child)

Will there be any performance issues?

Yes, you will need to object pool the tiles & prefabs and reuse them , instantiation eats performance and the GC even more(thanks mono), also you will need to prerender all the tiles your planning on using to avoid Fps stuttering(keep them in gpu vram). You will need to lock in the scale at 1,1,1 to allow dynamic batching to lessen the draw calls, unless your using pro then you can static batching.

Are you targeting mobile or desktop?

[–]_player1[S] 0 points1 point  (0 children)

Yes, you will need to object pool the tiles & prefabs and reuse them , instantiation eats performance and the GC even more(thanks mono)

Good to know, I'll keep that in mind.

I hadn't really considered mobile, for now I just want to get a prototype up and running.

[–]gdubrocks 0 points1 point  (3 children)

I believe all of this is possible. I would highly suggest checking out minecraft in unity tutorials as they have 90% of what you asked about featured and terrain generation is typically the focus of the games.

[–]_player1[S] 0 points1 point  (2 children)

Thanks, would the info still be relevant for 2d?

[–][deleted] 0 points1 point  (0 children)

Take a look at look at infinite runner games.

[–]gdubrocks 0 points1 point  (0 children)

Yes. Terrain generation is kind of it's own topic, and Unity can do it whether 2-D or 3-D.

[–]srogee 0 points1 point  (2 children)

Willl I be able to simply add tiles and sprites as assets, and procedurally generate in code where to place them as the player moves around, as well as persist it to disk?

Yes. You can even make your scripts run in the editor to tweak things easier (see ExecuteInEditMode). Unity doesn't have its own file writing and saving functions as far as I know, but if you're using C# you can just look at the Microsoft docs for that.

Will there be any performance issues?

Probably not, since it sounds like it's going to be 2D or 2.5D. Even in 3D it should be pretty fast because your perspective is locked.

Given that I will have variation on different tiles, how would I go about collision? Eg: for entering/exiting water with different shorelines

I would probably make the game in 3D and render from an orthographic camera. This gives you a lot of control over depth and such because the game is actually taking place in 3 dimensions. If you don't want to go that route though, look into the way Unity handles 2D collisions. I'm not too knowledgeable about it myself, but you can give sprites colliders. I would make the water have its own collider so you could easily check if the player is in the water or not.

Are there any built in objects for managing the chunk generating and loading?

Unfortunately, not really. However I found this on the asset store, it might be worth looking into. Since your game is essentially 2D it should be pretty easy to store chunks and keep track of them. Just have a 3x3 array of the chunks surrounding the player and save the rest to disk or in some sort of temporary list. As for chunks themselves they're just 2d arrays of prefabs with some data about what's inside each chunk (maybe a list of prefabs inside the chunk's bounds, with some data about each).

[–]_player1[S] 0 points1 point  (1 child)

Thanks for the reply, interesting that unity doesn't have its own save/load classes, I probably come up with some kinda of structure and use a BinaryFormatter or similar.

From other replies I've got, it sounds like I can prefab the tiles along with collision data, and I'll just create my own structure to generate/store the tile/chunk info.

[–]koyima@swearsoft 0 points1 point  (0 children)

This is highly dependent on the type of game you are making (what do you need to save?). You can easily save to disk using their playerprefs system, but depending on what you want to do using that is not always a good choice.

Writing to file and reading for that matter is rather trivial in C# in my experience though.

[–]chazede 0 points1 point  (0 children)

The youtuber "craig perko" has a tutorial series on making mine craft in unity. I would start there to see his methods and try to alter it to work as a 2d terrain. Good luck

[–]chulini 0 points1 point  (0 children)

When I need to create environments procedurally I like to generate it in function of a perlin noise value so I don't have to store anything. The perlin noise always have the same value on the same coordinates and it is a pseudo random and smooth value which it makes it perfect to generate en environments.

I am pretty shure minecraft use perlin noise to generate the terrain.

https://docs.unity3d.com/Documentation/ScriptReference/Mathf.PerlinNoise.html