Say hello to the new Lua dragger (Beta)

Hello everyone!

Today, we are extremely excited to introduce a brand new beta feature: a new dragger! This dragger is meant to be familiar to Studio users but also make building a lot more effortless and efficient. Oh, and the icing on the cake? It’s all based on a reusable Lua framework available to all of you to make your own.

You can turn on this beta feature by going to File -> Beta Features.

We had two goals in mind as we embarked on the epic adventure to create the new draggers in Studio. Your feedback will help us gauge how close we came to achieving our goals and all the things we need to do to get us closer.

  • Reusable Framework
    The new Move, Scale, and Rotate tools must be built on top of a framework that can be leveraged by our developer community. Developers can create their own new draggers and manipulators, or copy the core draggers and make minor adjustments to their behavior so that they work better for some particular task on one of their projects. Note: Expect this framework to be in flux during the early stages of the beta.

  • Improved Experience
    The design of the new Move, Scale, and Rotate tools are informed by the following principles:

    • Minimalism: Tools enhance user productivity and stay out of the way. They use the minimum UI needed to clearly communicate their functions and facilitate user interaction.
    • Familiarity: Tools incorporate common design idioms that developers would expect, such as RGB axis colors, arrows for move, rings for rotate, and so on.

Of course, building on Roblox has come a long way since the original draggers were conceived way back when, so we did make a few changes to the dragger to make building with native tools more efficient. The primary improvements to the dragger are in the behavior of the freeform dragging invoked when you click on a part and drag-drop it to a new location in the Workspace with any of the core manipulators (or any manipulators you build using the reusable framework in the future!)

  • Predictable Positioning.
    One of the issues with the old dragging behavior was unpredictability. It was sometimes hard to know where the dragged parts would end up when you dragged them in a particular way and, conversely, often difficult to know how you should drag them to get them into the desired position. The new freeform dragging behavior is to take the bounding box of the dragged objects, and place it onto the surface which the mouse is hovering over. Furthermore, the surface the mouse is hovering over is the only thing the new dragger takes into account: The dragged objects are free to intersect with other objects in the Workspace. This lets you place the dragged objects at the desired location regardless of what else happens to be around them, without needing to worry about some other object being slightly in the way and bumping the dragged parts out of the desired position.

  • Model Orientation.
    Naturally, the above point means that models and selections of multiple parts now snap and align to the hovered surface the same way a single part does while being dragged. See the grass model being aligned to the slope above.

  • Surface Direction Agnostic Operation.
    Have you ever tried to position objects on walls or ceilings of a model you’re making? You may have found that that doesn’t work very well with the old draggers. This problem is solved with the new draggers, they work exactly the same regardless of what direction the surface you’re trying to work on is pointing.

  • Predictable Tilt / Rotate.
    Using the tilt / rotate keys (T / R) while dragging now has predictable behavior as well.
    Rotate will always rotate around the surface onto which you’re dragging the part:


    Tilt will always tilt the part around the horizontal axis towards the camera:
    Models and selections of multiple parts are also tilted and rotated around the point you picked them up by, rather than around their centers.

  • Improved Snapping Control.
    The new dragger gives you more control over what features snap to what other features when grid snapping is turned on, allowing you to work with objects without grid-snapped sizes much more easily. The behavior is to take the vertex on the selection closest to where you clicked, and snap that vertex to the closest vertex of the part you’re dragging onto. The result of this is that you can pick up an object by the feature you want to snap, and drag it onto the feature you want to snap it to, and those features will naturally become aligned, regardless of how off-grid the sizing and positioning of the objects happens to be.

  • Virtual Surfaces.
    Have you ever tried to build a model floating in empty space? This did not work well with the old draggers, as when dragging onto empty space would often make the objects jump into the distance which was not useful behavior. The new draggers use a virtual surface in this case. When dragging a part onto empty space, the new draggers will treat it as though the last surface you were dragging onto extends into the empty space.

  • Dragging Into a Gap.
    Not a feature on its own, but a long standing issue with the old draggers was that it was difficult or impossible to drag a part back into a gap in a model if you accidentally dragged it out. With the new dragging behavior this will not be an issue.

We hope that this new dragger solves some of the key issues that many of you have pointed out and makes building in Studio a lot easier! Again, this feature is still in beta so we are looking for any and all feedback from all of you. Please keep in mind that we also may be making changes prior to a full release.

Big kudos to @tnavarts and @LuckyKobold for making this happen!

Happy building!

Note: Known issue (fix is ready and will be released soon) Currently the Lua draggers are missing a special case where models containing Humanoids should ignore the Join Surfaces option. As a temporary workaround, you can toggle Join Surfaces off when dragging character models.

948 Likes

This topic was automatically opened after 15 minutes.

Finally I can drag my parts and models around without dragging myself into a spiralling depression!

This is a long overdue and welcome change, and I might start using the dragging feature a bit more now that it’s more predictable and useful. Especially happy to see that it’s hackable and extendable by developers :grinning:

A couple of questions though! Will the behaviour of the Dragger instance also be updated to use this new dragging behaviour? Will it be deprecated?

Either way, I’m super hype for this. Thank you!

242 Likes

This is an awesome birthday present. I’ve struggled with the Studio manipulation tools for years and this looks like it solves so many fundamental woes I’ve had for literally over 10 years. I am indescribably happy about this. :heart: :heart: :heart: :heart:

109 Likes

Yes. Yes. Yes!
I’m so glad this is added, looking at all the things that are changed here this looks like a huge improvement from the old dragger, I bet you guys are proud of this and you should be.

Can’t wait to use this in action and I bet many others can’t wait either!

50 Likes

Is/will there be some specific way to modify/overwrite the core draggers, or will we be limited to using them to create plugins? That is to say, can I customize my draggers in such a way that I could just select them from the “Home”/“Model” toolbar like normal?

Overall, I love this initiative to expose as much functionality to developers as possible-it really feels like new doors are being opened.

Being able to disable/enable selection boxes on command, anyone? :stuck_out_tongue:

41 Likes

BEST APRIL FOOLS DAY GIFT EVER.

Any chance this makes for less floating point errors?

43 Likes

I disagree with your assessment of this as a “minor” improvement.

As someone that has been dealing with the C++ dragger since 2008, thank you.

56 Likes

Given the last update, I hope this is not april fools!

20 Likes

“Say Hello to the new Lua dragger”

Seriously though, I love when the clunkiness swiftly gets transformed into convenience (when it comes to tools).

Speaking of transformations, this is my reaction:

(I didn’t change genders though)

Is April Fools like the prime day for Roblox updates?! I mean seriously, we’ve had like 4 other update topics today! (I’m certainly not complaining!)

Awesome update, though!
Keep it up Roblox! :roblox::roblox_light:

Edit:
Oh my, I hope this ain’t another April Fools prank…

67 Likes

Looks like there are currently severe performance issues when moving the camera using the resize tool (my game has 94k instances under workspace), and the resize handles get a little bit confused when part orientation isn’t 0,0,0.

Everything else works like a dream.

43 Likes

Will these tools be open source? seems like they would be handy for online building.

24 Likes

Yes, yes, YES! All the yes from me, we have been waiting for a better Dragger for years.

A few critical points of feedback from myself that I beg Roblox engineers look at:

Please add Planar Dragging to the Move tool:

I think this is enough of an industry standard at this point that Roblox has to add this to the default toolset, I really don’t want to have to hack the Move tool to allow this functionality.

Please have PluginAction support for everything, including the “Reusable Framework” hinted:

PluginActions are essential for a professional workflow and I really hope they get some love in future updates (including being able to set keybinds from a plugin).

Please consider the builder when designing the “Reusable Framework”:
https://devforum.roblox.com/t/why-are-new-studio-tools-plugins/387983/6

A lot of us aren’t professional scripters who can read and interface with Roblox’s open source Lua plugins. Please consider that the majority of users who would wish to manipulate this tool are in fact the builders, the people using it the most.

Thank you so much for this update @tnavarts and @LuckyKobold! You’ve made my week.

24 Likes

:scream::scream::scream::scream::scream::scream::scream::scream::scream:
These recent updates have definitely been on my side: a new dragger, precise collision boxes, bone importing (mesh deformation stuff), and the list goes on!!!

Keep up the great work :+1:

20 Likes

Absolutely! Check out C:\Users[user]\AppData/Local/Roblox/Versions/[version]/BuiltInPlugins and look for the .rbxm files with “Dragger” in the name. Those can be dropped right back into Studio to be edited.

27 Likes

Neither for now. It will continue to molder away in the corner where it currently sits for the foreseeable future. It will be effectively deprecated in that anyone wanting dragging behavior now would be much better served using the dragger framework the new draggers are based on, since that gives them full control over how dragging works.

Unfortunately this requires some pretty hefty changes to support. I am investigating some APIs that might make this possible but I can’t promise anything yet. In the long term Studio will have to support some form of Ribbon Bar customization, which would mostly eliminate the need for a special case like that.

We still have optimization work to do on these before they leave the beta. If you have any cases of surprisingly bad performance (ie, not dragging 10,000 parts with Join Surfaces enabled), you can DM them to me and I will investigate. Yours does sound like something odd is happening. Drag-selecting multiple parts in a very large place being slow is a known issue but simply moving the camera should not be.

They are open source! If you open your Roblox install you will find them in the BuiltInPlugins folder as Select/Move/Rotate/ScaleDragger.rbxm.

We are going to be making many further improvements to the building tools, and things like that are on the table. For now we didn’t want to make too many radical changes at once given that these tools are so fundamental to Studio, but we are certainly not done yet, far from it!

32 Likes

moving models used to be a nightmare
but this is good :smiley:

14 Likes

This is an insanely exciting feature. So many quality of life improvements when building or designing the world! I really love this new dragger, and I want to thank the entire team that worked on making this come true.

I wonder how the dragger will behave if you have a model (such as the chair used for demonstration) and try to align it to a wedge. Will it keep its rotation, or line up with the wedge’s surface? Which part of the model will it use as reference for the rotation (in case it does line up)?

Love all of it! Keep up the fantastic work.

20 Likes

This is great! Now I don’t need to swap to F3X whenever I’m trying to do anything on walls/ceilings. People will start taking the built-in studio tools a little more seriously, and I’ll probably be using them more myself since it avoids me having to open the plug-ins tab.

12 Likes