- Home /
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?
Answer by Bunny83 · Aug 08, 2014 at 01:38 PM
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.
Answer by kannan21 · Aug 08, 2014 at 06:43 AM
Don't declare the datatype of weaponBehaviour as MonoBehaviour use the actual type of the script. For eg:
public WeaponBehaviour weaponBehaviour;
I tried that at first, same issue. I changed the type to GameObject and put the script on an empty prefab and it works now, just have to pull the script off of the game object with GetComponent.
Your answer

Follow this Question
Related Questions
How to store references between scriptableobject assets 3 Answers
ScriptableObject error with Inheritance 2 Answers
AddObjectToAsset (reference) becomes null 1 Answer
ScriptableObjects in a List all become nulls on Play 0 Answers
Data with reference to scene objects: Monobehaviour or ScriptableObject? 1 Answer