A GetTotalMass() method for models/parts or equivalent

Edit: Looks like I got what I wanted! Roblox added Assemblies, which now correctly handle this via the “AssemblyMass” property. Hooray! :partying_face: :partying_face: :partying_face:

Hi!

As a roblox developer, it is currently… inconvenient… to calculate the total mass of a system/model of connected (via constraints or welds) parts.

In the current roblox-lua API, either by design or due to a bug, getting the mass of a part (through .Mass or :GetMass() ) returns only the mass of the part, and ignores all connected parts.

This is great, but if you’re using body movers and trying to give a mover a specific acceleration (by setting it’s max force such that F=MA), it’s not useful on it’s own, since the force considers the mass of the whole system of connected parts (as it should).

Currently, in order to accurately specify a force for a model, You need to manually calculate the total mass of the model by doing something like:

local total_mass = 0
for index, part in pairs(Model:GetDescendants() ) do
    if part:IsA("BasePart") then
        total_mass += part.Mass
    end
end

which isn’t hard, just kind of inconvenient.

It would be nice if “Model” class instances had a native “:GetMass()” method that did this function or something similar, and/or if "BasePart"s had a “:GetEffectiveMass()” method (perhaps with a better name).

Use Cases:

  • Giving a vehicle/space ship/obstacle a “max acceleration” value (by setting the body mover’s force equal to the mass of the vehicle * your desired acceleration)
  • Doing the opposite, and getting the acceleration from the force active on a mass and the mass

I can’t think of many other use cases, but these seem “broad” enough to me (especially the former).


This is a pretty minor grievance, but in a physics-based platform like roblox, it just kind of makes sense to have this method - at least to me.

Since this seems like a pretty generic problem, I apologize if this has been suggested (and or declined) before; the last reference to this sort of thing that I could find dated back to 2015. I figured it was worth reviving.

I also apologize if there already exists an API method/property that does this; I must have missed it.


SIDE NOTE 1: This could also be “solved” by giving BodyMovers a “max acceleration” property, but that seems to be a lot more niche (albeit much easier to use for a newbie dev).

SIDE NOTE 2: I noticed that the BasePart class has both a .Mass property and a “:GetMass()” method that simply reads the (already readable) .Mass property. I personally thought GetMass would get the mass of the model/all connected parts. Could it be bugged?


TL:DR:

Please let us easily find the mass of a whole model of connected parts, so that we can easily accurately set the maximum acceleration of body movers.

Thanks for reading!
Hellhawk

39 Likes

Yes please. It would also help if we can ignore certain parts with certain properties in a 2nd parameter

1 Like

A total mass for the entire assembly exists now with Part.AssemblyMass:

I think ignoring certain parts should be a different feature request, but I don’t think it’s as necessary because you can just enable/disable the Massless property on parts you want to ignore/include.

1 Like