@RobCurr, regarding the protocol to use - I'd suggest you to take a look at Photon for Unity3D documentation. Do not use it, just read about how they've implemented the network protocols into their engine.
They use all of them, TCP, UDP and even RUDP (a custom made one), nicely separating the traffic into channels by data importance and whether it requires to be 100% received or not.