How do I make a bullet "bend" like in Big Paintball or Phantom Forces?

In these games, the bullets bend when they fall from gravity. I have a video here from Big Paintball of the bullets if you don’t understand what I mean.
robloxapp-20231102-1755240.wmv (1.3 MB)

I’ve tried using a ball with a trail but it doesn’t really have the same look at all.
So How do I recreate this? Thanks.

Is what you’re referring to an arc in the bullet based on the gravity applied? Could you also provide a code snippet example of how you’re implementing the projectile?

local bullet = repStorage:WaitForChild("Clones").Bullet:Clone()
bullet.Anchored = false
bullet.Position = tool.Handle.BulletStart.Position + char:FindFirstChild("Humanoid").MoveDirection
bullet.CanCollide = true
bullet.CustomPhysicalProperties = PhysicalProperties.new(99e9^99e9)
local attachment = Instance.new("Attachment", bullet)
local force = Instance.new("VectorForce", bullet)

force.Attachment0 = attachment 
force.Force = (Raycast.Direction + Vector3.new(0, 3, 0)).Unit * 15
force.RelativeTo = Enum.ActuatorRelativeTo.World

bullet.Parent = workspace
game:GetService("Debris"):AddItem(force, 0.1)
game:GetService("Debris"):AddItem(attachment, 0.1)
game:GetService("Debris"):AddItem(bullet, 3)

Quick question, is this on the server, it’s completely irrelevant for the arc just wondering.

Anyways EgoMoose did a tutorial post on this, linked here

If you need help lmk

If you want to attempt this without using someone else’s work, you can calculate projectile motion over time and raycast to the bullet’s destination every frame (I highly recommend doing this locally because it will appear smoother).

Some (pseudo)code:

local runSvc = game:GetService'RunService';
local bullets = {};
local gravity = -9.81;
local v0 = 1000; --initial velocity

--on bullet fire:
bullets[bullet] = {
	origin = muzzle.CFrame;
	progress = 0;
	pos = muzzle.CFrame; --use the positional and directional values of the muzzle's cframe to calculate the entire projection. obviously wont work if your muzzle is aesthetic
};

--constantly running
runSvc:BindToRenderStep('ballistics', 0, function(dt)
	for bullet, cfg in bullets do
		cfg.progress += dt;
		
		local newPos = cfg.origin * CFrame.new(v0 * cfg.progress, gravity * cfg.progress ^ 2, 0);
		
		local cast = workspace:Raycast(cfg.pos.Position, cfg.pos:ToObjectSpace(newPos).Position, params);
		
		if cast and cast.Instance then
			--ask server to deal damage if recipient was a player
			bullets[bullet] = nil;
			bullet:Destroy();
			return;
		end
		
		cfg.pos = newPos;
	end
end);

Note that bullet, muzzle, and params are not included, this is only the baseline for projectile motion. Many necessary elements are missing for a proper projectile system.

I’m not really looking for the arc. I just want the bullet to bend. I’m making a paintball gun, kind of like Splatoon, and I’m making close range guns so I want the bullets to be visually obvious that they’re bending. But thanks though.