0 votes

For my game, I wanted to implement a large seamless world to explore.

As a player move left or right, the game should load the areas that are near that player and unload areas that are too far.

Is there a way I can make this work under Godot, because the tutorials mostly talk about loading scenes in a not-so-seemless way.

in Engine by (18 points)

1 Answer

0 votes
Best answer

Doing this mostly boils down to segmenting your world into chunks, so you can "stream" it from disk and load only the part the player is standing on. You can do it simply by loading nodes dynamically rather than using change_scene for example.
The way of doing that differs a bit if the world is randomly generated (world building is then shipped with the game), and if it is not, you could have to build some tools to make that easier because Godot and most mainstream game engines (or even 3D software) work in single, non-streamed scenes.

I've been interested in this for a very long time but never really went far in implementing that (made a couple of Minecraft clones on the way). Doing that is non trivial and depends a lot on what you actually want to support. There can be a lot of work involving all areas, graphics, terrains, physics, floating-point precision handling, persistance, networking, probably sound too.

by (28,789 points)
selected by

If the world is static, it could be divided on scenes, preload will speed up the process too, then update "active" objects on _ready, when close preloaded scenes enter the tree (not changing scenes but adding and removing them from the tree).

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.