Why are HumanoidRootParts different heights with different bundles?

I have 2 dummies (same scaling with everything the same and both R15) and then just imported seperate bundles and put them on either clone. This in turn caused the HumanoidRootPart to change position

Why does this happen? They’re the same height. Hard to tell from image, but character in fronts HRP is lower (lower torso-upper leg) while one behind it has a normal HRP (torso area) Problem I have with these being in different positons is when I try to position them in a menu, I get this



One is higher than the other. I am simply setting their HRP to a invisible part, but since their HRP is different it means they have different positions.

I never edited the parts position (don’t think I can without it breaking)

I would first try to ‘move’ the HRP to a standard position in studio and see if it breaks anything

side note: i have removed the HRP from myself while playing in studio and you can still animate the body :stuck_out_tongue:

You can’t move the HRP (the whole model just moves down with it)

Question is more focused on why this is a thing

you could probably use Model:GetBoundingBox() as an alternative as it returns the CFrame of the Model

local characterCFrame, characterSize = Character:GetBoundingBox()

and just offset based on that

1 Like

How exactly??
If this is my current set up

Character:SetPrimaryPartCFrame(ClassScene.PrimaryPart.CFrame)

I mean as a way to position the camera without using a HumanoidRootPart, if all of the models are the relatively same size aside from the issue with the HumanoidRootPart size you could do something like this

local Offset = CFrame.new(0, 0, -5)
local characterCFrame, characterSize = Character:GetBoundingBox()

Camera.CFrame = CFrame.new((characterCFrame * Offset).Position, characterCFrame.Position)

I don’t want to move the camera, camera has to stay in the same spot. The HRP position is the only thing I can change

Desired Position of head - (Head.Position - HRP.Position)
if the head to root distance is larger it will move the model down to compensate

since your models viewed seem to be characters, using the head might be a good choice.
Could use a different reference, such as a Foot for aligning with ‘ground’

1 Like

I can’t use other parts other than the HRP, as moving other parts doesn’t affect the models whole position. I have to use SetPrimaryPartCFrame, and thus use HRP to position my model

I meant you use a frame of reference on the visible structure, such as the head.
and use the displacement between the desired frame and the HRP as a modifier when setting the CFrame

Not exactly sure how to do that

(modelHead.Position - modelHRP.Position)
this is the distance between the head and HRP
using just the Y component might be better if you have non humanoid models

head position after setting will be that distance added onto your HRP position

so the value of your SetPrimaryPartCFrame will be:
desiredHead.Position - (modelHead.Position - modelHRP.Position)

Character:SetPrimaryPartCFrame(ClassScene.PrimaryPart.Position - (Character.Head.Position - Character.PrimaryPart.Position))

Unable to cast Vector3 to CoordinateFrame

Red part being the head position (ClassScene.PrimaryPart)

local desiredPosition = Vector3.new(7,10,3)

local modelOne = Instance.new("Model")
modelOne.Name = "Model 1"

local head = Instance.new("Part")
head.Size = Vector3.new(1,1,1)
head.Position = Vector3.new(0,5,0)
head.Name = "Head"
head.Transparency = .5
head.Anchored = true
head.Parent = modelOne

local HRP = Instance.new("Part")
HRP.Size = Vector3.new(1,2,2)
HRP.Position = Vector3.new(0,3,0)
HRP.Name = "HumanoidRootPart"
HRP.Transparency = .5
HRP.Anchored = true
HRP.Parent = modelOne

modelOne.PrimaryPart = HRP
modelOne.Parent = workspace

local modelTwo = modelOne:Clone()
modelTwo.Name = "Model 2"
modelTwo.HumanoidRootPart.Position = Vector3.new(1,4,2)
modelTwo.PrimaryPart = modelTwo.HumanoidRootPart
modelTwo.Parent = workspace

models = {
  [1] = modelOne,
  [2] = modelTwo,
}

for i,v in pairs(models) do
  print(v)
  local offset = v.Head.Position - v.HumanoidRootPart.Position
  print("Distance between Head and HRP: ",offset)
  v:SetPrimaryPartCFrame(CFrame.new(desiredPosition - offset))
  print("Head Position ", v.Head.Position, "\n")
end