Today, we are extremely excited to move a brand new feature from beta to release: new draggers! The new Move, Scale, and Rotate tools are meant to be familiar to Studio users but also to make building a lot more effortless and efficient. They will be rolling out to all Studio users over the next few weeks. Oh, and the icing on the cake? They’re based on a reusable Lua framework available to all of you should you want to make your own draggers.
We had two goals in mind as we embarked on the epic adventure to create the new draggers in Studio.
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.
Predictability: Tools should have predictable and consistent behavior so that they work how creators expect.
Reusable Framework
The new Move, Scale, and Rotate tools are 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.
We made a few changes to the draggers to make building with native tools more efficient. The primary improvements to the draggers 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 draggers (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 Option
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). Choose whether or not you want objects to align to surfaces while dragging by right-clicking on your selection and toggling Align Dragged Objects.
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:
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
Freeform dragging now 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, 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!
Finally! Dragging has became much more versatile for daily use. I now use this feature all the time, ever since it was in beta. Glad everyone can use it now.
It is especially useful when I want an object to stick to the ground. Doing this with the move tool is very hard, as I’d have to move the part in very small increments. Not any longer! When I want to add something to be flat on the ground, I use the dragger!
Love this feature. Before this was in beta, whenever I’d want to move an object using the dragger, it would always come with the annoyance of not conforming to different angles from it’s origin. Not any longer!
These are also two very important aspects of the new Lua Draggers. It will make the dragger much more versatile.
It’s great that you’re focusing on precision building, which often works with off-grid increments. Love this change too.
Thank god you’ve implemented this new behavior. Often working in places floating in space, the dragger was so difficult to use because of the parts flying out into the void. This made the dragger virtually useless, bu with all these new changes. that won’t be the case any longer.
It’s actually kind of working as intended. The mathematical function that I choose for how it should drag has that implication at the extreme edge cases.
We’re looking at doing further redesign on the draggers in the near future after we get feedback on the full draggers release. Improving what happens in those edge cases is on my radar.
I’ve been having an issue with any game that has a reasonably high part count (the place I’m testing with only has like ~5500 parts in the background). It’s way slower/laggier when using the move tool on parts that are adjacent to others (creating the white selection box on the face that is touching).
Old:
New:
It can be a little hard to tell there, but it’s very noticeably slower when working in studio. This has been the sole reason I’ve stayed away from the Lua Draggers beta so I’m hoping it’ll be improved soon (I haven’t seen many other reports of lag like this - is anyone else even experiencing this issue?)
Still excited though, these new draggers are wayyy better.
I prioritized performance with Join Surfaces off since the majority of developers do their work with it off. I’m going to do an optimization pass on the Joint code soon, and things should improve noticeably when I do.
If you find a particularly good practical test case with noticeably worse performance than other similar situations please share it, I’d like some good real world test cases to use when I do that optimization pass.
Oh, gotcha. I only keep Join Surfaces on because of the white selection box, found it helpful to know when two surfaces are aligned properly but I forgot I could turn it off lol.
If I find anything noticeably severe in terms of performance I’ll share
This is an amazing and welcoming change, if my request for move/rotate/scale increments back a while ago ever makes it into the next updates, then I’ll certainly be more happier, because I’ve used qCmdUtl before.
This won’t be in the initial release, but is very likely to be added as part of the further improvements we have planned.
And at the same time, we get a WIP alligning plugin! Amazing.
Will this be able to be option, like will we be able to continue to use the old if we wanted, when I tried it when it was beta there was some things I didn’t really like about it, such as parts moving into other parts etc when dragging and some other things. Also the draggers seemed not as easy to click and hold to move. I cannot really explain it out.
That said there are some features like parts snapping to angles of other parts. The smooth and small movement of parts
Basically I’m fine with using the old way if it’s possible to still be able to use it.
No, the new draggers are currently force-enabled for 10% of users, and that will be increasing to 100% within a couple of weeks barring any significant issues coming up. We can temporarily disable the new draggers for you if you can explain a way in which they’re blocking your workflow while we work on a fix for that, but in the long run they will be forced for everyone.
We have planned features in the road-map which will fill the use case of actually “physically” freeform dragging something such that it never intersects with anything. In the meantime, let us know if there’s any use case which you’re actually blocked from completing with the new dragging behavior.
If I understand what you’re talking about correctly, you don’t like it that you can no longer click and slightly drag with your mouse to slightly adjust the position of a part (it will “jump” instead when you start the drag).
This is unfortunately a tradeoff that we had to make with the new dragging behavior: We decided that being able to predictably place a dragged object at almost any desired position was more important than being able to use the freeform dragging for those micro-adjustments.
You probably have the “Constraints” toggle turned on. When this toggle is turned on the draggers use Inverse Kinematic movement rather than geometric movement, you can think of it as moving the objects by applying a force rather than moving them by an exact offset. That “force” is applied through the center of the bounding box of the selected objects. Thus, if you drag an asymmetrical object, it will rotate (in the same way that if you push with your finger on the side of an object it will rotate as well as move).
I’m aware that this is not generally desirable behavior, and I’m going to be improving the situation with some changes coming in the next few months. For now you can turn off Constraints while moving models that aren’t part of a constrained mechanism.
Personally, I prefer the old lua dragger at this moment - The new one seems very, very buggy still and shouldn’t have been rolled out to everyone yet. Pressing F On a model which you have moved sometimes means all of the outlines when dragging become huge, performance has seemed to have gotten a LOT Worst with this dragger, and I don’t have a bad PC (Ryzen 7 2700, 1660TI, 16GB Ram, SSD Storage). And most importantly I don’t like that fact that it forces you to use the overly size mouse icon. It should still allow you to use your own mouse icons rather than being forced to use the studio’s new default mouse. (When hovering over objects)