Basically, I got an R15 animation out of Mixamo it doesn’t support R6 so I’m trying to find a way around that by converting it to R6.
I don’t know if such a thing is possible, but I have evidence possibly suggesting it is.
Here is the result of this script I made:
R15 character
R6 character
I know it looks a bit silly but I believe there is a clear similarity between the two, I just think my CFrame logic is a bit off, or it could be something else.
This is the script (entered in command bar):
local keyframeSequence = workspace.Script.Save.Animation:Clone()
workspace.R6.AnimSaves:ClearAllChildren()
keyframeSequence.Parent = workspace.R6.AnimSaves
for i, v in pairs(keyframeSequence:GetChildren()) do
-------------------
local humanoidRootPart = v.HumanoidRootPart --|
local lowerTorso = humanoidRootPart.LowerTorso:Clone() --|
local leftUpperLeg = lowerTorso.LeftUpperLeg:Clone() --|
local rightUpperLeg = lowerTorso.RightUpperLeg:Clone() --|
local leftLowerLeg = leftUpperLeg.LeftLowerLeg:Clone() --|
local rightLowerLeg = rightUpperLeg.RightLowerLeg:Clone()--|
local leftFoot = leftLowerLeg.LeftFoot:Clone() -- no conditional statements to check if any of these components exist :p
local rightFoot = rightLowerLeg.RightFoot:Clone() --|
local upperTorso = lowerTorso.UpperTorso:Clone() --|
local head = upperTorso.Head:Clone() --|
local leftUpperArm = upperTorso.LeftUpperArm:Clone() --|
local rightUpperArm = upperTorso.RightUpperArm:Clone() --|
local leftLowerArm = leftUpperArm.LeftLowerArm:Clone() --|
local rightLowerArm = rightUpperArm.RightLowerArm:Clone()--|
local leftHand = leftLowerArm.LeftHand:Clone() --|
local rightHand = rightLowerArm.RightHand:Clone() --|
-------------------
humanoidRootPart.LowerTorso:Destroy()
local torso = Instance.new("Pose", humanoidRootPart)
torso.Weight = 1
torso.Name = "Torso"
local headNew = Instance.new("Pose", torso)
headNew.Weight = 1
head.Name = "Head"
local leftArm = Instance.new("Pose", torso)
leftArm.Weight = 1
leftArm.Name = "Left Arm"
local rightArm = Instance.new("Pose", torso)
rightArm.Weight = 1
rightArm.Name = "Right Arm"
local leftLeg = Instance.new("Pose", torso)
leftLeg.Weight = 1
leftLeg.Name = "Left Leg"
local rightLeg = Instance.new("Pose", torso)
rightLeg.Weight = 1
rightLeg.Name = "Right Leg"
local function calculateCFrame(cframe1, cframe2) -- main logic
local cframe = cframe1*cframe2
return CFrame.new(cframe.p.Z, cframe.p.Y, cframe.p.X) * CFrame.Angles(cframe:ToEulerAnglesXYZ())
end
torso.CFrame = calculateCFrame(lowerTorso.CFrame, upperTorso.CFrame)
leftArm.CFrame = calculateCFrame(leftUpperArm.CFrame, leftLowerArm.CFrame)
rightArm.CFrame = calculateCFrame(rightUpperArm.CFrame, rightLowerArm.CFrame)
leftLeg.CFrame = calculateCFrame(leftUpperLeg.CFrame, leftLowerLeg.CFrame)
rightLeg.CFrame = calculateCFrame(rightUpperLeg.CFrame, rightLowerLeg.CFrame)
headNew.CFrame = head.CFrame
end
I’m more than happy to hear your opinion on this topic or any solutions, thanks!