Conversation Scriptable Objects
Last updated
Last updated
Scriptable Objects provide an easy way to create and populate custom data elements. In this course, will use scriptable objects to store dialog data and inventory items.
In the image below, we've created a ConversationList scriptableObject, to permanently store the data associated with a Conversation. ScriptableObjects are stored as project assets. The DialogManager class can be re-used within and across scenes with different instances of ConversationList data.
There are several steps required when creating a new type of scriptable object. Detailed example provided below using our Dialog Manager example:
Define a custom class (or struct) that has variables for each of the items you'll have associated with each scriptable object. This class must be defined using the [System.Serializable]
attribute: See details in full code below. We used this with the SimpleDialog.cs script
Class ConversationEntry
[see details: ConversationEntry]
Define a custom class that inherits from the Scriptable Object class. See details in full code below.
public class ConversationList : ScriptableObject
[See code below]
Define a collection data-structure, within this class the to hold a collection of the above defined composite elements. This is code within ConversationList class.
public List<ConversationEntry> Conversation
Any class that inherits from ScriptableObject will now show up as an option in the Project Assets Menu:
We will use the same ConversationEntry class that was used with the SimpleDialog.cs.
Create an instance of this C# script in your Unity project, paste the code below into the script within Visual Studio. Notice this class inherits from ScriptableObject, it does not inherit from Monobehaviour, so it can not be added directly to a gameObject within a scene. To use: A ConversationList variable must be created within a custom script like DialogManager, then it can be populated within the inspector with a pre-created instance of a ConversationList scriptable object.
Use as a public object-reference variable in a custom class, like DialogManager, that inherits from MonoBehaviour: The scriptable object instance will be connected in the inspector panel.
To create an instance of a Conversation asset, we right click in the project panel, or right click on the assets folder and select the bottom-most menu option: create -> ScriptableObject, where our custom asset: Conversation, now shows up as an option at the bottom of the menu. After clicking on Conversation, we now have a new item in our Assets panel, we should give it a unique name so we can reference it in our code. I've named the example one: ConversationList_CatScene1
.
The image below shows that the public ConversationList variable: convList has been set in the inspector by selecting the circle-icon to the right of the ConvList item