Posted October 05, 2018
"The godot way" is a way to look design your game by logically dividing it into entities that interact with each other, and then create each entity by using/combining built-in node and script to define their behavior. it's very similar to OOP (object oriented programming)
So let's say you want to make a pong game, you divide your game into entities such as ball, paddle and levels. And then you create each entity as a scene so you have ball scene, paddle scene and level scene. And then you create for example ball scene by using build in nodes like RigidBody, paddle scene using KinematicBody and a script to read player input, and level scene by using StaticBody. After that, you can add ball and paddle scene into your level scene.
This feature exists in every game engine. In unity they call it prefab. The difference is Godot is focused on this feature, So they make it very easy to create, combine, add and remove any scene. While Unity has just recently added the ability for nested prefab.
The downside if you decided to look at it that way (I certainly don't consider it a downside) is Godot comes only with a number of basic game object (we call it node) that's design to do one thing well. So to create a complicated scene you have to combine many of them. That means Godot doesn't come with standard complicated feature usually exists in other game engine such as player controller (Unity has one, but most people write their own anyway)
For example, since Godot doesn't come with built in player controller I created my FPS player controller by using KinematicBody as base (to allow it to physically interact with level), a camera, a RayCast to detect floor, and an Area to detect if player enter / exit ladder. And I have to code my own script to allow them to work. This sounds like a downside. But the upside is, if I want to add complicated feature such as climbing like you see in Dishonored, I can easily create one. In Godot, I do it by adding to player a RayCast to check for a position in surface, an area to check if said position can be climbed and if both check pass I then can move my player there using code. In Unity, I have to do it all by code, calculating RayCast origin manually, casting your collision box and determine the correct size etc.
I've done this climbing feature both in Unity and Godot. I can say it clearly, it's a lot easier to do in Godot
So let's say you want to make a pong game, you divide your game into entities such as ball, paddle and levels. And then you create each entity as a scene so you have ball scene, paddle scene and level scene. And then you create for example ball scene by using build in nodes like RigidBody, paddle scene using KinematicBody and a script to read player input, and level scene by using StaticBody. After that, you can add ball and paddle scene into your level scene.
This feature exists in every game engine. In unity they call it prefab. The difference is Godot is focused on this feature, So they make it very easy to create, combine, add and remove any scene. While Unity has just recently added the ability for nested prefab.
The downside if you decided to look at it that way (I certainly don't consider it a downside) is Godot comes only with a number of basic game object (we call it node) that's design to do one thing well. So to create a complicated scene you have to combine many of them. That means Godot doesn't come with standard complicated feature usually exists in other game engine such as player controller (Unity has one, but most people write their own anyway)
For example, since Godot doesn't come with built in player controller I created my FPS player controller by using KinematicBody as base (to allow it to physically interact with level), a camera, a RayCast to detect floor, and an Area to detect if player enter / exit ladder. And I have to code my own script to allow them to work. This sounds like a downside. But the upside is, if I want to add complicated feature such as climbing like you see in Dishonored, I can easily create one. In Godot, I do it by adding to player a RayCast to check for a position in surface, an area to check if said position can be climbed and if both check pass I then can move my player there using code. In Unity, I have to do it all by code, calculating RayCast origin manually, casting your collision box and determine the correct size etc.
I've done this climbing feature both in Unity and Godot. I can say it clearly, it's a lot easier to do in Godot