Missing BodyMovers Functionality: Only Apply Forces On Specific Axes

As a Roblox developer, it is currently non-trivial to remove ONE degree of freedom from a floating part without using legacy BodyMovers.

The BodyPosition instance, now superceded by AlignPosition, allowed for per-axis modification of forces.
What this meant is that you could set up your BodyPosition like this:

D = whatever (Depends on the part)
P = whatever (depends on the part)
MaxForce = 0,500000,0
Position = 0,10,0

and thus make an assembly “float” at a height of 10 studs from the origin; it would be completely unrestricted in the X and Z axes.

The current AlignPosition (the proposed successor to BodyPosition) does not allow for per axis forces; if you try to set a part to a height using an attachment, the part will float towards the attachment in space, and not only maintain the Y-Axis height of the attachment. (i.e the part will converge on 0,10,0 instead of only stay at Y-axis height 10).

The solution would be to bind a script to heartbeat such that it constantly updates the destination attachment to have the same X,Z coordinates as the desired parts; but that would by definition lag the part and cause unwanted forces/dampening of movement, and would require all sorts of interpolation to account for (admittedly, dynamics is a weak point of mine; I flunked that class in… my 3rd year of university…)

This functionality is incredibly useful - and CORE to a game I am making. This functionality allows myself as a developer to create a physics-enabled 2.5D game, where all of the game play occurs in the XZ plane, but effects and models exist in 3D space.

This functionality is difficult (and as far as I can tell, impossible) to achieve with the new constraints and attachment-based forces, which do not allow for per-axis force variation.

If legacy movers were removed tomorrow; months of work on my project (top-down space shooter) would be totally annihilated, and the project scrapped.

I hope I don’t have to create a case for why it is within ROBLOX’s interest to enable the creation of games that aren’t totally 3D.

What I am really asking for here is NOT necessarily to be able to apply per-axis forces (though it would be deeply appreciated), but rather to be able to restrict the motion of parts to a specific plane; be it global (i.e xy, xz planes). What I need is a “parallel” constraint; I want the physics engine to keep a part’s movement parallel to a plane. Literally, consider a “Parallel” assembly mate in SolidWorks; that is exactly what I’m asking for.

However, experience with physics engines - especially ROBLOX - leads me to believe this is best achieved with a force, rather than a physical constraint.

Also note that while I am not necessarily asking for per-axis force variation, it would be really useful to be able to directly vary forces per axis, and even more useful to be able to vary forces with reference to either the global axis (x,y,z) or the local axis of the part (i.e lookVector, rightVector, upVector).

Yes, you can achieve the local axis functionality using CFrames and a script, but that leads to all sorts of clunkiness in the dynamics of the objects (it is difficult to tell what is going on per server tick as a roblox dev).

Thank you for reading and considering my request! I appreciate the team’s continued effort to improve the platform. :smiley: