I tried creating a minimum case scenario, where I just create an Integer, assign it a value, and then create a method that prints it:
public class EdgarScript : MonoBehaviour {
public int testId = 1555;
public void test()
{
Debug.Log("testId: " + testId);
}
}
I then attach this Method to the UnityEvent in my Scriptable Object:

The Scriptable Object is attached to my NPC, and when I click my NPC I start the Dialog. When the Dialog finishes this Event i Invoked and it prints “testId: 0”.
I’ve tried assigning the value in Awake, Start, and in the editor. It always returns 0 when called from this Event. Does it simply not work to use Events in Scriptable objects for this because its an Asset and maybe it can’t access the value that gets assigned to the NPC on Awake(), Start(), or whenever?
I would really like to be able to pass Methods or Events through the Editor since I’ll have so many dialogs, and this is such a neat way to create them. I could have sworn I’ve seen people pass Method through the Editor but maybe I’m missing something.
Pretty sure what you’re asking for is impossible.
What you can do instead is have the button reference the method on the scriptable object.
Scriptable Objects are assets:
- they can reference other assets (including prefabs) , but not scene objects.
Scene objects can:
- reference other scene objects
- … assets (including prefabs/scriptable objects)
With that in mind, maybe you can think of a working solution 
Like methos said you can’t really hook up scene objects to an asset at editor-time, so theres little use for it being visible in the inspector. I typically make use of [HideInspector] on any unityevent on a ScriptableObject just to avoid the confusion. That said, you can hook them up at runtime purely through code.
You need to invert the flow of control. instead of having the ScriptableObject hold a reference to the Monobehaviour, have the Monobehaviour hold a reference to the ScriptableObject. then OnEnable the monobhaviour can use AddListener to attach its test method to the ScriptableObject’s PostEvent, and then remove it OnDisable. From the ScriptableObject’s point of view it doesn’t know that a Monobehaviour is listening to its event. and when the scriptableobject finally chooses to invoke its post event, the monobehaviour will react as is intended
Good stuff (and reminder to me). I believe I had heard that before, possibly from you ( @JoshuaMcKenzie ).
Now there are some options for the OP 
Thanks guys, This gives me some ideas 