How do i make realistic characters?

Hi everyone! I’ve always wanted to make a realistic game on Roblox, and bit by bit, that is slowly coming true. With FutureIsBright and Terrain Grass, there is simply one thing missing: Actual character rigging. In unity, it is a simple act of getting the character, and simply assigning its bones by dragging them where that bone will be used.

However, you can’t do that in Roblox at the moment.The title says it all. I want to have an alternate from using the custom character plugin as it never seems to work, and advice on how i can approach this challenge.

Thanks for reading!

6 Likes

I think the only thing you can do is make animations and meshes for the characters manually

1 Like

I don’t really know any other plugins, but I usually try to rig them manually. Rigging them manually is not that hard, actually. You will need to use Motor6D’s and welds, although welds are not necessary. Motor6D’s create a movable joint between two parts. Every Motor6D has a Part0 and Part1 property. Part1 will be connected to Part0

First off, every rig needs a Humanoid and a HumanoidRootPart. Giving a part that exact name will assign the humanoid’s rootpart to the part. You’ll then need to connect the HumanoidRootPart to a “main” part of the rig, just like the torso of r6 characters and the lower torso of r15 characters, via a Motor6D. That joint will be the RootJoint of the humanoid.

Every Motor6D has a C0 and C1 property that determines its position. C0 is a relative cframe from the Part0, which means that C0 is a certain distance away from Part0’s CFrame. C1 is subtracted from the C0 to determine the final offset point for Part1. Just like welds, Motor6D’s alter the parts’ positions so that: part0.CFrame * C0 == Part1.CFrame * C1

I wrote this function that makes it easy to connect two parts via a Motor6D or weld and will automatically adjust their C0 and C1 (a bit of scripting knowledge is required):

local function Connect(isMotor, p0, p1, name, parent)
    local m = Instance.new(isMotor and "Motor6D" or "Weld")
    local C = CFrame.new(p0.Position)
    m.C0 = p0.CFrame:inverse() * C
    m.C1 = p1.CFrame:inverse() * C
    m.Name = name
    m.Parent = parent
end

-- Example: (For the first argument, the Boolean (the true value there), putting "true" will create a Motor6D, putting "false" will create a Weld.

Connect(true, rig.HumanoidRootPart, rig.Torso, "RootJoint", rig.HumanoidRootPart)

On the topic of welds, welds created a fixed joint between two parts and have the same properties as Motor6D’s: Part0, Part1, C0, C1. You can use welds when you attach a part to a movable part and you cannot move that part. They aren’t really necessary when you’re rig building, but they can help you.

After all of that, you’ll be able to animate your own custom rig with any animation editor

3 Likes

I believe Roblox just made it so that you can import models which are already rigged. This means that you could rig the model in animation software before importing it to Roblox. If you want mesh deformation, (where the mesh isn’t broken into multiple pieces before being animated) that isn’t currently supported that I know of. I’m not sure if this is what you are looking for or not, but I didn’t see anyone else mentioning it.

1 Like

I was initially asking if mesh deformation was supported. As you said, it doesn’t seem that way, so thanks!

2 Likes

Thanks for that! I’ll keep that in mind…

1 Like

Or you could make custom meshes for player parts.