NOTEThe ■■■■ website here lost everything I entered when I clicked “Ask Your Question” as it went to the “Logging you in” page and then back here with a blank ■■■■ form.
I want to have a large selection of abilities for the player to choose from. The ones they choose can be bound to the 1,2,3 and 4 keys. Each of these chosen abilities can later then be tweaked and customised by the player.
There doesn’t seem to be a Blueprint class appropriate for making an ability out of. They all seem to assume a location is needed to be spawned and I can’t see any other method of achieving what I want. See below for a more in depth “Aim”.
I am currently making each ability as an actor blueprint that is set to be not visible in game. It has a single custom-event called “Use”. When a player chooses that ability for their slot (1), an instance is spawned of that blueprint and assigned to their ability_1 variable. When they use the ability, I just call “Use” on the reference to that spawned ability actor. This method also makes it quite easy to customise things during run-time. However, it also feels kinda wrong to have to provide a location and set the actor to not-visible implying there is likely a better solution.
Things like this are much easier to build on C++ (when you’re familiar with);
Because there you can create specific UObjects for your needs, then simply attach the object class to an actor and perform needed customizations via Blueprint code. In blueprint only project, you can do it as blueprint based objects to implement a common skill system.
Yes blueprints, don’t always need to inherit from actor. You can make a blueprint that inherits from “Object” which is basically a UObject. This is the class that every Unreal class ends up inheriting form and is the closest thing you’ll get to an “empty” blueprint object.
As it’s been pointed out, you can inherit blueprints from Object which is pretty much as low level as you can go with Blueprints, and then stuff your character’s abilities in one or multiple of them.
Another approach I’d like to suggest is looking at data tables. They’re actually very well suited for this. You create them via Misc → Datatable, but first you have to create a struct that will represent their columns.
They allow to structure well things such as damage, various ratios, range etc. And you can still ref a generic object defining some of the behaviours of each abilities of your hero.