Knife/Fireball won't float like in the tutorial

So I’ve been following a tutorial on making a battlegrounds game and there is a part of making a fireball ability. So I copied it and modified some things but it doesn’t float like in the video
This is the video



And this is the result

The script:

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local CharacterConfigurations = require(ReplicatedStorage.SharedModules.Configurations.CharacterConfigurations)

local Events = ReplicatedStorage.Events

local AttackDebounces = {}
local module = {}

local AttackData = nil

for _,v in CharacterConfigurations do
	if v.CharacterName == script.Parent.Name then
		AttackData = v
		break
	end
end

module.AttackFunction = function(Player)
	if Player.Values.IsAttacking.Value == false and not AttackDebounces[Player] then
		AttackDebounces[Player] = true
		Player.Values.IsAttacking.Value = true
		
		task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDuriation,  function()
			Player.Values.IsAttacking.Value = false
		end)
		
		local Character = Player.Character
		
		local KnifeAnimation = Character.Humanoid:LoadAnimation(script.ThrowKnifeAnimation) :: AnimationTrack
		KnifeAnimation:Play()
		
		local KnifeDagger = nil
		
		KnifeAnimation:GetMarkerReachedSignal("SpawnKnifeDagger"):Connect(function()
			KnifeDagger = ReplicatedStorage.Assets.KnifeDagger:Clone()
			KnifeDagger.Anchored = true
			KnifeDagger.Parent = workspace
			for i=1,27 do
				KnifeDagger.CFrame = Character["Right Arm"].RightGripAttachment.WorldCFrame
				task.wait()
			end
		end)
		
		KnifeAnimation:GetMarkerReachedSignal("ThrowKnifeDagger"):Connect(function()
			KnifeDagger.VectorForce.Force = Vector3.new(0, KnifeDagger.Mass * workspace.Gravity, 0)
			KnifeDagger.Anchored = false
			
			KnifeDagger.AssemblyLinearVelocity = (Character.HumanoidRootPart.CFrame.LookVector * 50)
		end)
		
		task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDebounce,  function()
			AttackDebounces[Player] = nil
		end)
		return true
	else
		return false
	end
end

return module

If you remove the animation will it work then? Looks like your code is throwing the knife when the arm is going down so that is what i believe is causing your issue.
Screenshot 2025-04-30 080914

Here is a close look on what’s happening.


I’m using vector force so that it floats like it said in the tutorial but the force does nothing. I also updated the code so that there’s more velocity.

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local CharacterConfigurations = require(ReplicatedStorage.SharedModules.Configurations.CharacterConfigurations)

local AttackHitboxes = require(game.ServerScriptService.Modules.AttackHitboxes)

local Events = ReplicatedStorage.Events

local AttackDebounces = {}
local module = {}

local AttackData = nil

for _,v in CharacterConfigurations do
	if v.CharacterName == script.Parent.Name then
		AttackData = v
		break
	end
end

module.AttackFunction = function(Player)
	if Player.Values.IsAttacking.Value == false and not AttackDebounces[Player] then
		AttackDebounces[Player] = true
		Player.Values.IsAttacking.Value = true
		
		task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDuriation,  function()
			Player.Values.IsAttacking.Value = false
		end)
		
		local Character = Player.Character
		
		local KnifeAnimation = Character.Humanoid:LoadAnimation(script.ThrowKnifeAnimation) :: AnimationTrack
		KnifeAnimation:Play()
		
		local KnifeDagger = nil
		
		KnifeAnimation:GetMarkerReachedSignal("SpawnKnifeDagger"):Connect(function()
			KnifeDagger = ReplicatedStorage.Assets.KnifeDagger:Clone()
			KnifeDagger.Anchored = true
			KnifeDagger.Parent = workspace
			local KnifeDaggerDebounce = false
			KnifeDagger.Touched:Connect(function(Hit)
				local Humanoid = Hit.Parent:FindFirstChild("Humanoid") or Hit.Parent.Parent:FindFirstChild("Humanoid")
				if Humanoid then
					if Hit.Parent.Name ~= Player.Name and Hit.Parent.Parent.Name ~= Player.Name then
						if not KnifeDaggerDebounce then
							KnifeDaggerDebounce = true
							AttackHitboxes.CreateHitbox(Character, KnifeDagger.Size, 25, true, Humanoid.Parent.HumanoidRootPart.CFrame)
						end
					end 
				end
			end)
			for i=1,27 do
				KnifeDagger.CFrame = Character["Right Arm"].RightGripAttachment.WorldCFrame
				task.wait()
			end
		end)
		
		KnifeAnimation:GetMarkerReachedSignal("ThrowKnifeDagger"):Connect(function()
			KnifeDagger.VectorForce.Force = Vector3.new(0, KnifeDagger.Mass * workspace.Gravity, 0)
			KnifeDagger.Anchored = false
			KnifeDagger:SetNetworkOwner(Player)
			KnifeDagger.AssemblyLinearVelocity = (Character.HumanoidRootPart.CFrame.LookVector * 100)
		end)
		
		task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDebounce,  function()
			AttackDebounces[Player] = nil
		end)
		return true
	else
		return false
	end
end

return module

Try applying more force * 100 isn’t a lot it IS a big number in our eyes but the force’s eyes its not normally i have to do like 10,000 or even 20,000

But if I set it to a high amount, it will go super fast that my eye can’t see.

May i ask why are you adding the Knife’s Mass when in the video it doesn’t do that?

KnifeDagger.VectorForce.Force = Vector3.new(0, KnifeDagger.Mass * workspace.Gravity, 0)

It wasn’t the whole tutorial. It was just a clip.

Try setting the assemblylinearvelocity before setting the vectorforce.force