What do you want to achieve? Keep it simple and clear!
I want to fix the character/characters weapon or view model colliding with the ground on equip. This only seems to happen when equipping the weapons, not when just walking around
What is the issue? Include screenshots / videos if possible!
If you look at the ground while in first person and spam equip any of the weapons, you will most likely collide with the ground and get stunned kinda Weapon Animation Place 2025 - Roblox
What solutions have you tried so far? Did you look for solutions on the Developer Hub?
I have done the following:
Made sure can collide is off on everything
Made sure can touch is off on everything
Made sure can query is off on everything
Made sure the collision group is set to “Viewmodel” and the view model collision group is not set to collide with anything
Also, important detail, I use weld constraints, and I made sure everything was good with the welds because I heard this might be a weld issue. Also, FE weapon kit welds on the client then removes the client weld one the server creates its own weld.
I am not using the view model version of FE gun kit. I am using the normal one that comes with an automatic view model scripts which adds view model arms then changes the weld on the weapon so it alligns with the view model arms
It sounds like the issue might be related to how the viewmodel is interacting with the environment when equipping the weapon. Even though you’ve turned off “CanCollide” and set the collision group to “Viewmodel,” it could be a timing issue with how the welds are updated. Since the client is handling the welds first and then the server updates them, this could cause the weapon to briefly collide with the ground. You might want to check if the character’s collision settings are affecting the viewmodel, or consider temporarily disabling collisions on the character while equipping the weapon. Another thing to try is syncing the viewmodel arm animations and weapon position better, ensuring they’re in sync when equipping the weapon. Adding some debug logs could also help you pinpoint exactly when and where the collision is happening to narrow it down further.
i do have this for a long time since dvn warfare as i used fe gun kit with this exact universal viewmodel, the problem is from how viewmodel detects Motor6D or Weld before it was able to catch up, neither of this came from the model or part since collision group was already adjusted at the beginning of tool equipping, I’ve had this exact issue reported before but my only workaround isn’t a fix as it was just to limit the hotbar cooldown (the ui you see tools listed below)
it’s pretty noticeable the higher the ping you get from what I’ve tested, viewmodel for this one uses 2 constraints (Motor6D and Weld) in most game when you equipped tools that move freely, you’re creating constraints on server, and because there’s only one constraint, when you put any tools like sword or anything that defaults to “RightGrip” it doesn’t interfere with things on client, but because we had 2 constraints each for model boundary, it will take one frame for it to disable the one on server which is what it’s supposed yo do
i had a solution of mine planned earlier which is by pre making the Motor6D on a server and store it in a table, then have it disabled on client if it was for a server so when you unequipped the tool, change either Part0 or Part1 that is either the “base part” of your gun to nil and when you equip it there, set that to something else
note that i havent rlly tried this yet but as far as i can get, this is the closest i can get to fix it
It worked! Thanks!
Here is how I did it:
First, I opened the GunServer script inside the weapon
Then, right before the equipped function, I added this code:
function checkVals()
local newPlayer = script.Parent.Parent.Parent
if newPlayer:IsA("Player") then
Player = newPlayer
Character = Player.Character
Humanoid = Character:FindFirstChildOfClass("Humanoid")
LeftArm = Character:FindFirstChild("Left Arm") or Character:FindFirstChild("LeftHand")
RightArm = Character:FindFirstChild("Right Arm") or Character:FindFirstChild("RightHand")
OriginalWalkSpeed = (Humanoid and Humanoid.WalkSpeed) or 16
if not welded then
SetCustomGrip(true)
end
end
end
checkVals()
Tool.AncestryChanged:Connect(checkVals)
What this does is create the weld BEFORE the weapon is equipped.
The next step is to add a new variable at the top of the script called “welded”
local welded = false
Then, in the equip function, add this check
Next, Comment out or remove this line on the unEquipped function
Lastly, replace the “SetCustomGrip()” function with this:
function SetCustomGrip(Enabled)
if Enabled then
GripId += 1
local LastGripId = GripId
for i, v in pairs(Module.CustomGrips) do
if LastGripId ~= GripId then
break
end
local Part0 = GetInstanceFromAncestor(v.CustomGripPart0)
local Part1 = GetInstanceFromAncestor(v.CustomGripPart1)
if not Part0 or not Part1 then
continue
end
local Motor6DInstance = Motor6DInstances[Part1]
if not Motor6DInstance then
print("Created Motor6D For "..Tool.Name)
Motor6DInstance = Instance.new("Motor6D")
Motor6DInstance:SetAttribute("ServerInitialized", "")
Motor6DInstance.Name = Tool.Name.."_6D"
Motor6DInstance.Part0 = Part0
Motor6DInstance.Part1 = Part1
end
if Part1.Name == "Handle" and Part1.Parent == Tool then
if not DefaultC0 or not DefaultC1 then
repeat task.wait() if LastGripId ~= GripId then break end until RightArm:FindFirstChild("RightGrip")
if LastGripId == GripId then
local RightGrip = RightArm:FindFirstChild("RightGrip")
if RightGrip then
DefaultC0 = RightGrip.C0
DefaultC1 = RightGrip.C1
RightGrip.Enabled = false
RightGrip:Destroy()
end
end
end
if DefaultC0 and DefaultC1 then
if v.AlignC0AndC1FromDefaultGrip then
Motor6DInstance.C0 = DefaultC0
Motor6DInstance.C1 = DefaultC1
end
if v.CustomGripCFrame then
Motor6DInstance.C0 *= v.CustomGripC0
Motor6DInstance.C1 *= v.CustomGripC1
end
Motor6DInstance.Parent = Part0
Motor6DInstances[Part1] = Motor6DInstance
--table.insert(Motor6DInstances, Motor6DInstance)
end
else
if v.AlignC0AndC1FromDefaultGrip and DefaultC0 and DefaultC1 then
Motor6DInstance.C0 = DefaultC0
Motor6DInstance.C1 = DefaultC1
end
if v.CustomGripCFrame then
Motor6DInstance.C0 *= v.CustomGripC0
Motor6DInstance.C1 *= v.CustomGripC1
end
Motor6DInstance.Parent = Part0
Motor6DInstances[Part1] = Motor6DInstance
--table.insert(Motor6DInstances, Motor6DInstance)
end
welded = true
end
else
GripId += 1
--[[for _, v in pairs(Motor6DInstances) do
if v then
v:Destroy()
end
end
table.clear(Motor6DInstances)
DefaultC0 = nil
DefaultC1 = nil]]
end
end
I modified it to only make a motor6d if there already wasnt one before