Things in another scene that is not loaded essentially do not exist.
Is that other scene loaded? If so, then a singleton pattern to locate it like you have above will work just fine.
If you want a bunch of buttons to be available across a bunch of scenes, you could put those buttons into their own scene and additively load them.
This is something else entirely and involves load/save properties. DO NOT combine the presentation of what the save state is (eg, what levels are done / not done) with the actual state stored, which is a simple load/save artifact.
Load/Save steps:
https://discussions.unity.com/t/799896/4
An excellent discussion of loading/saving in Unity3D by Xarbrough:
https://discussions.unity.com/t/870022/6
When loading, you can never re-create a MonoBehaviour or ScriptableObject instance directly from JSON. The reason is they are hybrid C# and native engine objects, and when the JSON package calls new to make one, it cannot make the native engine portion of the object.
Instead you must first create the MonoBehaviour using AddComponent() on a GameObject instance, or use ScriptableObject.CreateInstance() to make your SO, then use the appropriate JSON “populate object” call to fill in its public fields.
If you want to use PlayerPrefs to save your game, it’s always better to use a JSON-based wrapper such as this one I forked from a fellow named Brett M Johnson on github:
https://gist.github.com/kurtdekker/7db0500da01c3eb2a7ac8040198ce7f6
Do not use the binary formatter/serializer: it is insecure, it cannot be made secure, and it makes debugging very difficult, plus it actually will NOT prevent people from modifying your save data on their computers.
https://docs.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide
Additive scene loading is one possible solution:
https://discussions.unity.com/t/820920/2
https://discussions.unity.com/t/820920/4
https://discussions.unity.com/t/824447/2
A multi-scene loader thingy:
https://pastebin.com/Vecczt5Q
My typical Scene Loader:
https://gist.github.com/kurtdekker/862da3bc22ee13aff61a7606ece6fdd3
Other notes on additive scene loading:
https://discussions.unity.com/t/805654/2
Timing of scene loading:
https://discussions.unity.com/t/813922/2
Also, if something exists only in one scene, DO NOT MAKE A PREFAB out of it. It’s a waste of time and needlessly splits your work between two files, the prefab and the scene, leading to many possible errors and edge cases.
Two similar examples of checking if everything is ready to go:
https://discussions.unity.com/t/840487/10
https://discussions.unity.com/t/851480/4