Not sure if there’s a built-in feature that allows for this, but there are two ways to achieve this:
You can rename/remove the handle and have the tool weld to your hand, which will prevent it from being held like that. I think you need to disable ‘RequireHandle’ in the tool as well.
Override the equip animation by either stopping it or playing an animation with same/higher priority (if you’re using custom idle & movement animations).
Priority
In your game you may have several different animations for player actions and states, but what happens when you want to start playing an animation when another is currently running? For instance, suppose you have a jump animation and an animation for when a character is standing still. To make the jump animation override the standing animation, priority should be used.
There are four levels of animation priority:
Core (lowest priority)
Idle
Movement
Action (highest priority)
If you start playing an animation with a higher priority than the one that was already playing, the new animation will supersede the old. You can set the priority in the editor while making an animation by clicking on the priority menu and selecting your desired level.
I saw you mentioned you’re using custom animations, therefore welding to the hand is probably the best method.
You could just change the tool equip animation in the default Animate script, which you can find in your character. Read more about replacing default character animations here.
Alternatively, you can make an overriding animation play when the tool is equipped, this does not require anything besides knowing how to find playing animations or how to create & play an animation.
Disabling the animation through playing over it
You’ll need to ensure you have an AnimationTrack with a higher priority setting than ‘Idle’. This can be changed in a script or in the animation editor.
Make sure that the player’s arm is the focus of the animation!
local tool = script.Parent
-- Constant for Animation object that contains the new ToolEquip Animation
local animation = script.Parent.ToolEquipAnim
local animationTrack;
tool.Equipped:Connect(function()
local character = tool.Parent
local humanoid = character:WaitForChild('Humanoid')
-- This will load an AnimationTrack on Humanoid
local animationTrack = humanoid:LoadAnimation(animation)
-- Set animationTrack priority to the same priority as idle animation;
-- will cancel it out
animationTrack.Priority = Enum.AnimationPriority.Idle
-- Play the animationTrack
animationTrack:Play()
end)
tool.Unequipped:Connect(function()
-- Stop the animationTrack from persisting once unequipped
if animationTrack then
animationTrack:Stop()
end
end)
Welding
If you want to weld it to your hand, then:
Make sure you have the following:
That Tool.RequiresHandle is set to false.
There is no part named ‘Handle’ within the part.
That there is a main or primary part in the tool that will be used to weld to the player’s hand.
You’ll want to weld the tool to the player’s hand by finding the correct offset for your tool. You can use a WeldConstraint to achieve this or use a Weld (useful article here) by finding the correct CFrame.