Sorry for ressurrecting this post. But since it appears on Google's first page, I want to help future folks with the same issue.
Creating custom resources in C# is still not supported but there is a workaround:
Create your scriptable object as usual, class SuperObj: Resource
.
Now, when creating your resource, just create a base Resource file and attach that script to it.
To load the ScriptableObject, normally you could load it with GD.Load()
and cast it to your class: PlayerData data = GD.Load("res://Data/player.tres") as PlayerData;
But for some reason, Godot can't make that cast. Instead, you can use Resource.Get() to access your properties with a string as parameter:
var data = GD.Load("res://Data/player.tres");
GD.Print(data.Get("hp").ToString());
That's a workaround, I don't know if this is the best approach, but it is the best I could find. :)~~