So this is why I thought you were consulting an LLM. Because an LLM will give you a code solution when you should be using a Godot Editor solution. In this case, this:

Just add the camera to the player in the scene. Do not add it through code. There are so many benefits to this. Just look at all the options in the Inspector. Not to mention, you can see what the player is going to see in the game.
A Camera3D is just an generic Node. It doesn’t need to be unique or globally accessible. In my game Skele-Tom, I use SEVEN cameras - just on the player.
As for the Player, it’s again, just an object. It does not need to be a Singleton. All Nodes are passed by Reference. (See below.) Furthermore, they are attached to the Scene Tree. so just keep track of the Player and if you want to move it between level scenes, just reparent it. What you can do is make an Autoload to store the Player so it doesn’t get orphaned. But to @normalized’s point, you can also just pass the reference through functions and then there’s no need for an Autoload or Singleton.
If you don’t know, pass by reference means that if you have this:
var player: Player = Player.new()
var bob: Player = player
bob is just pointing to the original player. (Same goes for if you use C#.)
I’ve used both Java and C# professionally for years. I’ve also used GDScript for years (professionally for about a year now). And I can tell you that you will learn more from using GDScript than you will with C# because it is different than Java. C# is literally a Microsoft clone of Java made because they didn’t want to pay Sun to use Java. The biggest difference between C# and Java is the package managers.
If you are applying for a job or promotion using C#, then you might be better served doing something other than Godot altogether because there’s a lot of weird gotchas in Godot that you don’t need to worry about professionally.
As for the tabs thing - get over it. Once you get used to it, you’ll hate semicolons and love tabbed languages. They are much easier to read because you don’t have to follow curly braces and since indentation affects execution it’s a lot easier to tell what function or loop you’re in.
But still you do you. Just keep in mind while there are a handful of people on here who know how to use C#, we really only have one Godot C# expert. (It’s not me.) The pool of knowledge about GDScript on here is much larger.