Just to throw it out there, you might want to look at mono game. It isn't a full game engine. Instead it supplies some nice functionality that simplifies interfacing with graphics, sound, and input but does nothing with physics and scene organization. It will take more work to get your game off the ground with monogame but offers a little more flexibility at a lower level.
Best C# engine for beginners
I don't know how much my advice is worth, as my experience making games has had Unity involved probably 90%-95% of the time, and i've never done to much programming outside of game development aside from learning things for game development, but i'll give you my advice anyway. I think you should DEFIANTLY give Unity a try. It's actually really easy when you get familiar with it, and learn how everything goes together. When I started using C# in it, i had hardly ever used it before, but it was pretty easy to pick up, though, I had been using UnityScript for a while.
Here are some good YouTube channels that don't make things seem so intimidating
https://www.youtube.com/user/ETeeskiTutorials
https://www.youtube.com/user/Brackeys/videos
Specific knowledge probably won't carry over to different engines, but the concepts will. And things like the new Unreal Engine 4 are very similar to Unity in alot of ways.
I want to second HappyCoder's recommendation to look at MonoGame. It will allow you to get to grips with the technology as you need to use it, without presenting you with a flood of options. It will, however, require more work and an appreciation for working in the code. It will also require you to consider how games are put together, from an underlying technology standpoint, rather than simply how you can implement your mechanics and content.
However, if you want to work in 3D and use C#, then Unity is a good choice. It has some idiosyncrasies, many of which I dislike, but it's a solid piece of technology that can help you create almost any game idea and will, at least, help you learn how such technologies work. Just being able to identify the aspects you like and dislike will be a great advantage in considering game development.
Otherwise, I have heard that you may be able to use Mono with Unreal now. Does anyone have more knowledge about this?
if i or some one would become really experienced with this engine would it be like starting all over again if they needed to one day change to a different engine that has different file structure and other options? or would it be easy to change from unity if i have learned to code and do other things in unity that can be used in any engine
There are things that are general techniques and knowledge you will be able to transfer from engine to engine. Like "how to design an A* Algorithm for my AI", or "how to setup my damage system code".
Or general knowledge like "what is a lightmap", "what is a collider"....
There is a lot of C# in the C# behaviour scripts you write for Unity (sounds stupid, I know, but some other engines hide A LOT of the language you think you are using from you. Like some C++ Engines hiding most of the hard parts like memory management), which will transfer to every other C# Engine.
There are always proprietary things and stuff that is not working exactly the same way in different engines. For example: Most engines nowadays give you a level editor. You will be able to create and edit terrain heightmaps in most of them.
HOW exactly you do that differs a lot. Sometimes its just different shortcuts and buttons, sometimes there are special systems involved (like streaming terrain systems for some engines) that make a difference in how you create your terrain (in some, for example, you work on an editor version of the terrain that you then need to "bake" for realtime usage).
There is the API Layer that you use to Interface your own scripts with the engine. This is highly proprietary.