2019 Moving Models Best Practices?

It’s late 2019, how best to move a model?

Games need moving models and many developers want:

  • Smooth Eye Pleasing Movement (optional animations, no motion stutter or glitching)
  • Security (never trust the client, speed / teleport hacks, …)

So:

  1. What does Roblox recommend as Best Practice or Preferred Practice going forward?

  2. What does the community actually find suitable for their needs?

Choices to make:

  • Constraints
  • Body Movers
  • TweenService
  • HeartBeat CFrame:Lerp
  • RenderStepped CFrame using custom calculations (no Lerp)
  • Model:SetPrimaryPartCFrame() (Known problems, still used by some?!)
  • Humanoid:MoveTo
  • Model:MoveTo
  • PrimaryPart.Position (component of CFrame)
  • PrimaryPart.Velocity
  • Motor6D
  • Surely this list could be longer? :slight_smile:

Have BodyMovers actually been replaced by Constraints in practice? Should we use one or can we / should we use both together?

If the answer to any of these questions is: “Choose the right tool for the job”, then the question becomes where is it documented which tool is right for what job?

BodyMovers are deprecated? comment from Oct 2018, and yet the BodyMovers article page was just updated June 14 2019. Devforum still gets new posts about using and recommended usage of BodyMovers such as BodyGyro.

Constraints are the New Body Movers, and yet unexpected behaviour and limitations arise all too frequently. Network Ownership, number of constraints, predictable consistency across server and all clients, etc. And these can change over time with new builds.

In my experience questions about movement are posted all the time (being fundamental to most games). For example, Quotery wrote a post I might otherwise well have written myself.

Would it be helpful to developers at large (who may not know for certain) to have more consensus on up-to-date how and when and why to use each?

6 Likes

I totally agree with you, there should be a new and easier way to move models, or objects in general. Honestly what roblox currently has is fine, but it has a lot missing, most of the ways of doing this seem inefficient, and have a linear sort of feeling, like tweens are good but they’re annoying to deal with, :Lerp() needs for loops, body movers are fine but using them isn’t ideal ect.

Honestly what I find best is using this module by SteadyOn which is basically a better version of tweens, it’s very efficient, and handles replication by itself so it stops server lag.

But other than this, we deffintly need something better and easier to deal with. We can for example take inspirations from other engines

2 Likes

I have had the best results with constraints such as AlignPosition. The movement is very smooth across client and server.

On the other hand, I have had very poor results with SetPrimaryPartCFrame, which is very choppy and laggy at times.

I do wish there was a combination of these two in which I can use a constraint like AlignPosition to get the smooth movement, but the behavior of SetPrimaryPartCFrame in which all the model’s children are moved together.

1 Like

I made a tutorial on involving TweenService with moving models.