- Make a simple and complete game, with the full flow of "Loading > Starting > Playing > Finished > Published" as soon as you can, and do this for each "concept" you want to explore
- Try to focus on one concept you want to learn per game made
- Don't give up on the current game but force yourself to go through the full flow, even if the game itself is trash and you're 110% sure no one will play it.
- Accept that the first 10 games will be absolute crap and show almost no progress, but after that you'll see that you improve
- Note down flows and architectures that works for you when implementing those games, iterate on those ideas in future games
What engine you use is almost irrelevant, as long as you pick one and stay with it. Also, it depends on what type of game you're trying to develop.
- Unity 3D if you want something quick and basic that will be easy to find people to collaborate on in the future
- Unreal Engine if you want something complete and complex, and are fine with a slightly steeper learning curve, but also easy to find collaborators in the future
- Bevy if you want something experimental that focuses 100% on code (for now), with a large focus on parallelism and be able to write code with Rust
- Godot if you want something similar to Unity Engine but FOSS and not as feature complete (yet).
- Finally, write your own game engine in whatever language you want if you don't actually want to create a finished game but you'd rather fall into rabbit hole after rabbit hole trying to create a better engine. Lots of fun and educational, but not productive if the end goal is a published game.
I'd pick Unity, despite the recent shenanigans. Good support for the mobile targets