I am developing the mission system for my RPG videogame. Now, missions are primarily composed by data (mission name, description, number of tasks, type of tasks…) so I thought to use ScriptableObjects, since I know they are supposed to be used to store data. The issue comes when I need to reference some objects (mainly components) within the scene: NPCs assigning missions, Colliders concluding mission objectives when triggered, and so on. ScriptableObjects are assets, and therefore cannot reference objects in the scene; however, theese data are part of mission data. So, which is the right way to handle them? Using Monobehaviours to directly reference objects in the scene (though attaching mission data to unnecessary gameObjects, slowing down hierarchy traversing), or using ScriptableObjects to indirectly reference theese objects with custom IDs (though working in a much less intuitive and more complex environment)?
P.S. I also know that Monobehaviours are serialized somehow differently from ScriptableObjects, but I still don’t get if that would be a problem considering the large amount of references from other objects to mission data.