Unfortunately, while ScriptableObjects can be selected from the assets (as well as things like sprites, textures, Animators), MonoBehaviours can’t be selected from the assets with the standard editor.
They can be selected from the assets with custom editors, or with tools like OdinInspector (paid asset).
As @bixarrio says, finding a MonoBehaviour is more complex than finding a standard asset because you have to load every single prefab asset in the game and then test it against the monobehaviour you’re looking for with GetComponent.
Here’s a trick that will let you load a Pickup and ensure that it’s a Pickup, though it won’t make selecting it any easier unless you include something like Pickup in the name:
[SerializeField] GameObject pickupGameObject=null;
[SerializeField] Pickup pickup=null;
void OnValidate()
{
if(pickupGameObject==null) return;
if(pickupGameObject.TryGetComponent(out Pickup testPickup))
{
pickup = testPickup;
}
pickupGameObject=null;
}
This will allow you to select any GameObject with pickupGameObject… When you click on this field, click the assets tab of the dialogue and type in pickup (you named all your pickups a variation of pickup, right?). Then select your desired pickup. OnValidate will then populate the pickup field correctly.