Roblox has proved that it might absolutely decimate R6 eventually. It might take 5 years, but hundreds of thousands of projects will become useless.
Optional Prerequisite:
AnimationEditor.rbxmx (596.6 KB)
(old rig builder and animation editor, better than the new one, but the new one works)
To address these, you can change Humanoid.RigType to Enum.HumanoidRigType.R15 in your R6 Humanoids, and it will just work after changing Humanoid.HipHeight to 2.
All animations will remain compatible, and you might want to move the default Animate script over, but it works great. Climbing seems to be a little off, but that’s probably fine.
First, create a StarterCharacter using the old Roblox rig builder plugin (the new one is utter garbage and puts bloat in the character). You will have a StarterCharacter after renaming it:
Unanchor it, and rename it accordingly.
Then, set the following Humanoid properties (HipHeight and RigType):
Now, test it. Put this character inside of the StarterPlayer, and it should work. If it works for your game, then you’re good.
If it does not work, please tell the community what happened down below so we can alleviate the differences between R6 and R15.
In my case, I put the default meshes inside of the character limbs, and it looks like this:
Not bad. Looks exactly like R6, because it basically is.
Now, when you spawn in, you’ll only be spawning in with this grey blocky character. To fix that, we can add a Script on the server to apply humanoid appearance when the characters spawn in:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(Player : Player)
Player.CharacterAdded:Connect(function(Character : Model)
--Roblox retrieves a HumanoidDescription on each character load. We'll do that too.
local HumanoidDescription : HumanoidDescription = Players:GetHumanoidDescriptionFromUserId(Player.UserId)
local Humanoid : Humanoid = Character.Humanoid
Humanoid:ApplyDescription(HumanoidDescription)
Humanoid.HipHeight = 2
end)
end)
You will only notice one problem immediately. The shirt and pants didn’t load. Well, actually, they did, but R15 doesn’t work with the R6 shirt/pants.
There are only two options for addressing this without some hacky methods:
- Create six Textures for each limb / part and map it to a very specific scale and offset for shirt and pants.
- Give up.
So, I guess we’re doing the first one.
But I’m too lazy to implement that, so I’ll just set the TextureId for each limb to the value of the shirt and pants respectively. It’ll look horrible, but it’s better than nothing:
I really could not find a good enough way to map these onto the Humanoid.
And believe me, I tried for hours to map the textures. It’s not efficient and older ones are a different size.
Heck, even the FPS viewmodels use a Humanoid to get the shirts to work properly. So, if you don’t care about performance, I wrote a script to have both rigs. It’s a little complicated, so you can get it in the place file at the end of this document.
Then, there are Seats. They don’t work right!
Another connection to deal with, in a Script in the character:
local Character : Model = script.Parent
local Humanoid : Humanoid = Character.Humanoid
Humanoid.Seated:Connect(function(active, currentSeatPart)
if active then
local SeatWeld : Weld = currentSeatPart:WaitForChild("SeatWeld", 1)
if SeatWeld then
SeatWeld.C0 = CFrame.new(0, Humanoid.HipHeight, 0) * CFrame.Angles(-(math.pi/2), 0, 0)
end
end
end)
Seats start to work properly after doing this. This will change the CFrame of the SeatWeld in order to move the character up slightly.
Tools. They don’t work AT ALL:
There are two ways to fix this:
- Use the embedded rig that has the appearance to use the tool.
- Add an R15 “RightHand” part.
Adding the RightHand is easier, so this tutorial will feature that. All you really need to do is put something like the following in the script:
local RightHand = Instance.new("Part")
RightHand.CFrame = Character["Right Arm"].CFrame
RightHand.Size = Vector3.new(1, 0.2, 1)
RightHand.Massless = true
RightHand.Transparency = 1
RightHand.Name = "RightHand"
local RHWeld = Instance.new("Weld")
RHWeld.Part0 = Character["Right Arm"]
RHWeld.Part1 = RightHand
RHWeld.C0 = CFrame.new(0, -0.9, 0)
RHWeld.Parent = RightHand
RightHand.Parent = Character
Create a RightHand, move it, parent it, and you’re done. Tools work! I’m not sure if the hand position is completely right, but it seems like it’s pretty close if not at the exact same spot.
Now, when I say tools work, you might say that there’s a problem with the ClassicSword. This is because these tools detect Humanoid.RigType, and if you were to insert, say, the 2014 version of the SwordScript, which was created before R15, it would behave just like the R6 version.
So, now, basically everything works. For a summary:
- We created an R6 StarterCharacter but set the Humanoid to the R15 RigType
- A problem with clothing occurred, which we addressed by creating a Humanoid rig inside of the character.
- We fixed seats with a
Scriptthat changes the SeatWeld when it is created. - Tools were fixed by adding the necessary RightHand.






