Took me some time to discover that ScriptableObjects equivalent in Godot are Resources. After researching and asking a bit, I made a quick test last night that went surprisingly well.
I wanted to test the OOP capabilities of GDScript, more specifically, if I could extend the Resource class for my own twisted and evil purposes, the same way I used ScriptableObjects in Unity. That is, to store items, skills, etc. It sort of works. Excuse me if I dont show any code, but Im still not sure that what I did was completely right and I dont want to point anybody in the wrong direction.
But I do can show you at least this. Lets suppose I want to have my items stored as resources, so my first step was to inherit the Resource class:
extends Resource
class_name BaseItem
export(String) var Id
export(Resource) var mesh
****
The base class contains all the info needed in all child classes, as usual. I can even store a Resource inside of another, in this case, the item mesh. Any item type in the game can have its own class:
extends BaseItem
class_name ItemWeapon
And of course, reimplement and override any function from the parent class. But be careful, because any value written to a resource will be replicated to everywhere the resource is referenced. Still havent found a way to create different instances or copies, although maybe I wont need to if I design some way to use them only as data sources, not actual items.
The next step is to learn enough about dictionaries in GDScript to implement my dialogs (and then a dialog editor), which of course, will be stored as Resources.
I wanted to test the OOP capabilities of GDScript, more specifically, if I could extend the Resource class for my own twisted and evil purposes, the same way I used ScriptableObjects in Unity. That is, to store items, skills, etc. It sort of works. Excuse me if I dont show any code, but Im still not sure that what I did was completely right and I dont want to point anybody in the wrong direction.
But I do can show you at least this. Lets suppose I want to have my items stored as resources, so my first step was to inherit the Resource class:
extends Resource
class_name BaseItem
export(String) var Id
export(Resource) var mesh
****
The base class contains all the info needed in all child classes, as usual. I can even store a Resource inside of another, in this case, the item mesh. Any item type in the game can have its own class:
extends BaseItem
class_name ItemWeapon
And of course, reimplement and override any function from the parent class. But be careful, because any value written to a resource will be replicated to everywhere the resource is referenced. Still havent found a way to create different instances or copies, although maybe I wont need to if I design some way to use them only as data sources, not actual items.
The next step is to learn enough about dictionaries in GDScript to implement my dialogs (and then a dialog editor), which of course, will be stored as Resources.
Comments
Post a Comment