Always have trouble with that stuff as well, similar errors as you experience them.
Unity means a special build. Normaly you would take a single cpp file, copy in all headers and compile that. When building with Unity enabled, you copy multiple cpp files together and compile them as one file. Making a change to one of the cpp files, requires you to build the whole Unity element again. The theoretical advantage here: You only need to go through all headers of that Unity element only once.
E.g. If you have one.cpp and two.cpp and both include Engine.h. Compiling them on their own also compiles Engine.h multiple times. Making a Unity element of those .cpp files will need to compile Engine.h only once. If you have big headers that get included in multiple files, you basically have a big performance improvement, as all those headers need to compile only once. Though changing a .cpp file of that Unity element requires to compile all that files again.
In general: Compiling the whole Project: Unity build is the build of choice.
Having the Project already build and only make changes to a single file: You only want to compile that file.
Unity would also be an advantage if you have .cpp files that in general do not contain much code but have lots of big headers included. As the code in the .cpp files grow, the Unity build gets less reasonable.
An example here: If you have a example.cpp with only 20 lines of simple code that gets into Unity with a big 15k code lines file and change the example.cpp, you also need to recompile the 15k.
But that also mean, building with Unity includes header files into the Unity element that you do not directly include into you specific .cpp file. This way your .cpp can use code that was never included (directly). As soon as the Unity element breaks, changes order of the .cpp files in the Unity element, or your .cpp file gets compiled on its own, you suddenly start missing that includes and get lots of errors.