I know it's a long shot but I personally grew up playing naval based games and would like to work towards something of this level. Something that's worrying me about using an engine is having one that would be able to support features such as waves without effecting the performance.
Some of my time is spent in making 3D ocean going vessels of all sizes, which I have imported into a couple simulations. People are pleased that the Indie and Pro versions of Unity 3D have excellent performance with any one of several ocean simulators which you may plug into the Unity engine. In my opinion, the Triton SDK provides a good balance of quality and performance when used with Unity 3D.
The default water for the no cost (free) version of Unity will be an adequate place holder until you gain enough experience with Unity to justify an upgrade to Indy or Pro.
Perhaps you may want to look seriously into this sooner rather than later. Follow the link under the video for this water system:
The Triton SDK is very flexible and would give you the opportunity to learn the way that creating water should be done in a game or simulation. In the meantime, there are some third party water libraries for Unity that are no cost or very affordable.
In your coding, you must put the water into memory management and thread allocation to get superior performance. Since dynamic water is somewhat demanding on computer performance, you will need memory management and processing allocation in order to have the realism that everyone wants. The C++ libraries are very capable in these areas. Use the coding languages recommended by Unity and your ocean simulation of choice, rather than recompiling. (Once you become experienced, then recompiling will be a viable option.) A comprehensive SDK like Triton would be essential. There are other fantastic water simulators out there, too, so have a look at them, such as a fantastic Russian Ocean Simulation SDK (There are 3 of them from Russia, but I mean the highest quality ones), but the name eludes me at the moment.
I recommend that you establish major areas in his order:
2) Import a simple user controlled object and code it to be manipulated by the end user (you at this point). This is a test.
5) Import a complex object such as a ship which you like, configure it in Unity 3D, and add any coding along your long term game development functionality.
Start simple in these areas. Learn game development by Version Control system. Examples are Alpha, Beta, and Version numbers [ Alpha 0.1 thru Alpha 9.9 (higher or lower by need), Beta 0.1 thru Beta 9.9 (or whatever needed), and Version 1.0 thru Version 1.1 thru Version 9.9 ] You may use your own system of numbering at this stage, but a couple hours into research online about Source Control will result in many hours of increased productivity and happier development. Keep copies of every version stage of your game development!
Make one simple game and finish it. Create a second simple, but improved game and finish it. Develop a third more complex game and complete it. Working in stages helps the evolution of coding. Kill the very inferior coding after a lot of hard attempt at a feature of the game with no success. If it works, then do a better job at coding next round of development. End any game development which becomes so muddled that you get lost or can not debug it any further and start another one. Keep any useable coding as a springboard to dive into deeper game development. Your coding will improve on the next game.
One last piece of advice: Look for publications on developing a game using Unity 3D on Amazon or other sites, as well as get recommendations from Unity 3D developers on good instruction manuals for coding in that engine.
Work hard and enjoy!