GUI.Window's ID should be different and unique in entire project?

as title says,

GUI window’s ID should be different even between different scene, different scripts?

I wouldn’t worry about it. The ID’s are not required to be the same. Often, you can just use 0. However, it must be unique for methods that target specific windows (such as GUI.BringWindowToBack), so for them, you can either decide the IDs for each of your windows manually (0, 1, 2, etc.), or use the helper function GUIUtility.GetControlID. For windows, pass FocusType.Passive (I believe). Anyways, this will generate a unique ID that isn’t already in use.

And, as long as your scripts don’t have conflicting window IDs, you can use them in different scenes without problems. For example, a Pause Menu with a window containing buttons could be used in every scene, using the window ID 0, and you’d never have a problem, as long as there are no other windows that use the ID 0.