Using a ScriptableObject to store script references

So I’ve got myself a ScriptableObject I’m using as a database asset. It holds a List of these Weapon Serializable Objects:

using UnityEngine;
using System.Collections;

[System.Serializable]
public class Weapon {
	
	public string weaponName;
	public int weaponID;
	public float weaponDamage;
	public float swingSpeed;
	public MonoBehaviour weaponBehaviour;

	public Weapon() {

	}
}

The issue is that I cannot assign weaponBehaviour through the inspector. I want to be able to store a reference to a specific MonoBehaviour script for each different entry in the database. Am I approaching this incorrectly?

A scriptableobject is an asset. An asset can only reference other assets. You can’t reference things that are inside a scene. Those things only exists when the scene is loaded. So if the objects you want to reference are inside the scene, you should use a MonoBehaviour script inside that scene as well, instead of a ScriptableObject.

If your “weapons” are also assets (seperate prefabs), you can assign a reference to the script on the prefab, as the prefab is also an asset. You can use thie reference to instantiate that prefab at runtime.

Don’t declare the datatype of weaponBehaviour as MonoBehaviour use the actual type of the script. For eg:

public WeaponBehaviour weaponBehaviour;