Preset Manager for organizing and bulk-applying Properties, Attributes, Tags, and CollisionGroups to instances

As a Roblox developer, it is currently too hard to keep track of all of the tags, attributes, collision groups, and commonly used property-sets in my game, as well as all of the ways these things can be combined and how code can expect them to be combined.

A Preset Manager would be a window that allows developers to organize all of these things, even presets with only single things changed (e.g. tags like the tag editor, or attributes), and would satisfy a great deal of use-cases all at once, including the use-cases satisfied by the tag editor.

For example, a common use-case for tags is to tag many similar instances in your game, and then have some manager script register these tagged instances to apply some effect to them (e.g. applying an animation, making them hazardous like lava, defining possible interaction). It’s difficult to remember what the names of these tags are without using some third-party plugin to organize them.

With the recent release of attributes also, now it’s possible to have the code managing tagged instances also expect a specific arrangement of attributes on instances with that tag. For example, models tagged “Breakable” could expect attributes that define how much damage it takes, whether or not it’s flammable, etc. I would have to manually remember to add all of these attributes for every breakable model I create, or have to hunt existing ones down in my game hierarchy to clone them, or else my code will break.

Additionally, perhaps I have a 3D skybox made of parts with a specific collision group and certain properties, such as CastShadow disabled. To work on this skybox, I would need to remember to set the collision group and disable CastShadow, or gameplay mistakes could happen or I could hurt performance. If I haven’t touched this skybox for a long time and decide I need to use a new instance type (e.g. ball, meshpart), I will likely forget to do this.

Finally, while working with UI, I often need to apply a common set of properties (e.g. background transparency, text color) to UI elements while getting design and layout sorted out. It’s difficult for me to remember the precise background color I used for the majority of my UI, or the consistent font sizes I’ve chosen to use in my game, and it’s annoying to have to click between instances all the time to copy and paste properties one at a time. Further, if I’ve designed a UI system that uses tagged instances to create or style components, I need to remember the tag names to be able to use that system.

There are countless ways that these four features can be combined, and it is impossible for developers to remember all of them without having to clone existing instances, or reference code.

Functionality I would expect from such a “Preset Manager”:

  • The ability to create “presets”.
    • A Preset would be a set of properties, attributes, tags, and a collision group.
  • The ability to apply Presets to instances in the selection.
    • Presets can be applied to any instance type. Property names that are not valid are simply ignored.
    • These presets could be applied additively or as a complete overwrite to an instance.
      • If I “add” a preset to an instance, only properties defined in the preset will be changed, missing tags and attributes will be added, and the collision group will be changed
      • If I “set” a preset on an instance, all properties will be reset to Studio default, all tags and attributes will be deleted, and the Preset will then be added as above.
  • The ability to name and organize Presets, perhaps into named folders.
  • The ability to quickly find a preset, e.g. by searching by name, or by a “most recently used” browser sort.
    • The UI I might expect for this would be something similar to the asset manager, with a mini version in the properties widget on a button that shows your most recently used Presets that you can apply with one click, and provides a shortcut to open the Preset Manager. Consider the Insert Object widget for inspiration.

Nice to haves:

  • Ability to select or highlight all instances in the game that match a given preset.
  • Ability to generate presets from instances.
  • Ability to transfer or copy and paste Presets between Studio instances.
  • Ability to copy properties + tags + attributes + collision group to your clipboard from an instance, and paste them directly onto other instances, so you don’t need to create a Preset just to copy and paste properties (e.g. between Lighting in different Studio instances).
  • Colors / icons to differentiate Presets and Preset folders

The above feature list covers the use-cases mentioned, but also covers the issue of being unable to browse all tags (and attributes) available in the game, which developers rely on plugins for. I would be able to use this Preset Manager as defined to create presets for individual tags in my game that I could then organize into a Tags folder. I would be able to add tags (and more) to instances with one click just as I can with a third-party tag editor plugin.

If Roblox is able to address this issue, it would improve my development experience because I would be able to more efficiently use CollectionService + Attribute patterns that approximate ECS in Roblox, I would be able to keep track of the tags used in my game without relying on a third-party plugin (that new developers would know nothing about), and I would be able to more efficiently design UI since I wouldn’t have to keep hunting down templates, or copying properties one at a time.