Why is it that I can make prefabs (which are assets) reference scene objects but not be able to do the same for ScriptableObjects?

According to Bunny here, ScriptableObjects are assets, assets can only reference other assets and not scene objects. Scene objects can reference other scene objects and assets alike. Question is, aren’t prefabs considered to be assets as well? If so, why is it that I can reference scene objects from prefabs? i.e.

public class TestSO : ScriptableObject
{
   public Object obj; 
}

public class TestBeh : MonoBehaviour
{
   public Object obj;
}

Creating an asset of TestSO and trying to drag-drop a scene object to ‘obj’, Unity won’t allow me. Creating a prefab of TestBeh and doing the same, I can assign ‘obj’! Why?

Can someone elaborate on this a bit?

Thanks.

Edit: It was a mistake as I was ‘user the impression’ that I was using a MonoBehaviour when I was able to assign scene objects to prefabs, but I was not, I was using a custom BetterBehaviour. You definitely can’t and shouldn’t assign scene objects to prefabs. End of story.

Well, you can’t, and you shouldn’t be able to. (When I try to do that, I can’t at least).

But maybe you misunderstood something.

Because ‘Scene Objects’ are objects that are used in the scene and are shown in the hierarchy of a scene. Assets are things that reside inside the asset folder, in Unity they are visible inside the Project window. Any prefab in the project window can’t reference scene objects (from the hierarchy) but can reference other assets (From the project window).

The reason for this is simple, There can be more then one scene. If you would have a reference to a object in the scene, and then try to instantiate the prefab in another scene, the reference would be broken as the thing that you are referencing doesn’t exist inside the other scene. But assets can still reference other assets

What you can do however is instantiate a prefab (when you drag a prefab from the project folder to the hierarchy) and then drag a scene object into one of the fields of the instantiated prefab. Because Instantiated prefabs are scene objects, with a link to an asset. They are not assets themselves, only the prefab in the Project window is an asset.