It's difficult to explain. So I'll be using screenshots if that's fine.
Description: I've been making a dragon, fully animated and with a custom rigging. Though, it seems that the first wing being welded to the character displaces. Yet both the wing welding scripts are the same (Except for the Left/Right part) and the rigging is all fine too. Code paths fine as well. The weight is fine as well, because I sized the wings down earlier, and it had no effect.
What I've tried to fix it:
- Re-animating the entire rigging. (About 7 times)
- Re-rigging it (About 4 - 5 times)
- Sizing the wings down. (Followed by a re-animate & re-rigging)
- Re-doing/modifying some code
- Pasting it in a new place (In the hope it'd work...)
- Make the morph weld everything separately. (Walking on one button for each body piece)
All the above did not work. So I was hoping people would know how to fix it here.
What I found out:
- The first wing being welded to the character doesn't function correctly.
- The parts usually called 'Middle' are misplaced, together with the character's body parts the middles attach to.
- When I anchor any character's part, the misplaced objects all return to the right spot and the animation functions correctly. (This works best when anchoring the torso.) But after unchecking the anchor box, they all misplace again.
Screenshots and explanation: The Morph model: http://prntscr.com/9605k1 This is what the character should become. (Unanimated still)
After stepping on the button, the following parts/models are cloned into the character: http://prntscr.com/9605pe http://prntscr.com/9605sz Those will change the appearance of the character.
And this is how it looks when the torso is not anchored: http://prntscr.com/9605vc http://prntscr.com/9605xm
This is how it looks when the torso is anchored: http://prntscr.com/9605zv http://prntscr.com/960625
Some codes related to the issue: The Morphing script:
function onTouched(hit)
if hit.Parent:findFirstChild("Humanoid") ~= nil and hit.Parent:findFirstChild("RightA1") == nil and hit.Parent:findFirstChild("RightA2") == nil and hit.Parent:findFirstChild("RightA3") == nil and hit.Parent:findFirstChild("LeftA1") == nil and hit.Parent:findFirstChild("LeftA2") == nil and hit.Parent:findFirstChild("LeftA3") == nil then
-- Right Wings --
local g = script.Parent.Parent.RightA1:clone()
g.Parent = hit.Parent
local C = g:GetChildren()
for i=1, #C do
if C[i]:IsA("BasePart") then
local W = Instance.new("Weld")
W.Part0 = g.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g.Middle.Position)
local C0 = g.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g.Middle
end
local Y = Instance.new("Weld")
Y.Part0 = hit.Parent["Right Arm"]
Y.Part1 = g.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
end
local h = g:GetChildren()
for i = 1, # h do
if h[i]:IsA("BasePart") then
h[i].Anchored = false
h[i].CanCollide = false
end
end
local g2 = script.Parent.Parent.RightA2:clone()
g2.Parent = hit.Parent
local C = g2:GetChildren()
for i=1, #C do
if C[i]:IsA("BasePart") then
local W = Instance.new("Weld")
W.Part0 = g2.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g2.Middle.Position)
local C0 = g2.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g2.Middle
end
local Y = Instance.new("Weld")
Y.Part0 = hit.Parent["Right Arm 2"]
Y.Part1 = g2.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
end
local h = g2:GetChildren()
for i = 1, # h do
if h[i]:IsA("BasePart") then
h[i].Anchored = false
h[i].CanCollide = false
end
end
local g3 = script.Parent.Parent.RightA3:clone()
g3.Parent = hit.Parent
local C = g3:GetChildren()
for i=1, #C do
if C[i]:IsA("BasePart") then
local W = Instance.new("Weld")
W.Part0 = g3.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g3.Middle.Position)
local C0 = g3.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g3.Middle
end
local Y = Instance.new("Weld")
Y.Part0 = hit.Parent["Right Arm 3"]
Y.Part1 = g3.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
end
local h = g3:GetChildren()
for i = 1, # h do
if h[i]:IsA("BasePart") then
h[i].Anchored = false
h[i].CanCollide = false
end
end
-- Left Wings --
local g4 = script.Parent.Parent.LeftA1:clone()
g4.Parent = hit.Parent
local C = g4:GetChildren()
for i=1, #C do
if C[i]:IsA("BasePart") then
local W = Instance.new("Weld")
W.Part0 = g4.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g4.Middle.Position)
local C0 = g4.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g4.Middle
end
local Y = Instance.new("Weld")
Y.Part0 = hit.Parent["Left Arm"]
Y.Part1 = g4.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
end
local h = g4:GetChildren()
for i = 1, # h do
if h[i]:IsA("BasePart") then
h[i].Anchored = false
h[i].CanCollide = false
end
end
local g5 = script.Parent.Parent.LeftA2:clone()
g5.Parent = hit.Parent
local C = g5:GetChildren()
for i=1, #C do
if C[i]:IsA("BasePart") then
local W = Instance.new("Weld")
W.Part0 = g5.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g5.Middle.Position)
local C0 = g5.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g5.Middle
end
local Y = Instance.new("Weld")
Y.Part0 = hit.Parent["Left Arm 2"]
Y.Part1 = g5.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
end
local h = g5:GetChildren()
for i = 1, # h do
if h[i]:IsA("BasePart") then
h[i].Anchored = false
h[i].CanCollide = false
end
end
local g6 = script.Parent.Parent.LeftA3:clone()
g6.Parent = hit.Parent
local C = g6:GetChildren()
for i=1, #C do
if C[i]:IsA("BasePart") then
local W = Instance.new("Weld")
W.Part0 = g6.Middle
W.Part1 = C[i]
local CJ = CFrame.new(g6.Middle.Position)
local C0 = g6.Middle.CFrame:inverse()*CJ
local C1 = C[i].CFrame:inverse()*CJ
W.C0 = C0
W.C1 = C1
W.Parent = g6.Middle
end
local Y = Instance.new("Weld")
Y.Part0 = hit.Parent["Left Arm 3"]
Y.Part1 = g6.Middle
Y.C0 = CFrame.new(0, 0, 0)
Y.Parent = Y.Part0
end
local h = g6:GetChildren()
for i = 1, # h do
if h[i]:IsA("BasePart") then
h[i].Anchored = false
h[i].CanCollide = false
end
end
end
end
script.Parent.Touched:connect(onTouched)

2 comments
Why don't you try using the custom character creator plugin and replacing the character?
I've never heard of it. And therefore this all worked on other morphs. Could you introduce it to me, please? (I'll PM you on Roblox or so?)