How do I make a spell bolt?

I’ve made a wand and added spells and stuff, however, I have no idea how to make a bolt come out of the wand.
I don’t want to make it so that it reaches the target straight away as soon as the caster clicks, but instead act as a projectile that eventually reaches its supposed target.

Thanks.

Have you implemented it as a raycast or a hit-detection thing? Because you can make a bullet like this:

local TravelDistance = 40 -- in studs
local Wand -- change this to your wand part

local bullet = Instance.new("Part")
bullet.Size = Vector3.new(0.1,0.1,0.1)
bullet.Parent = game.Workspace
bullet.CFrame = Wand.CFrame
bullet.Velocity = BulletDirection * TravelDistance

okay, so to start, lets make a function that will make the effect and start with a BasePart

function spellBolt(velocity, originCF)
    local bolt = Instance.new("Part")

to achieve a

style effect you may want to use a ParticleEmitter but lets just stay basic for this tutorial

    bolt.Size = Vector3.new(1, 1, 1)
    bolt.Material = Enum.Material.Neon
    bolt.Transparency = 0.3
    bolt.Anchored = false
    bolt.CanCollide = false

we want this thing to move right? let’s add a BodyVelocity

    local bv = Instance.new("BodyVelocity")
    bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
    bv.Velocity = velocity
    bv.Parent = bolt

finally, lets put the bolt into existance

    bolt.CFrame = originCF
    bolt.Parent = workspace
    bolt.Touched:Connect(function()
        --do damage and stuff
    end)
end

so now when we want to make a new spell effect, just do this

--this is whatever function you have to catch the player remote event

--i'm not sure about the way you built your game, but i'm assuming you're
--having the server create the effects AND do hitboxes 

--use remote events and don't forget security checks!
function activateWand(playerWhoRequested, direction)
    --to get direction, you would just do a mouse raycast and send the vector
    --to the server with the remote event
    local character = playerWhoRequested.Character
    local velocity = direction * 20
    --i'm not sure where you want the player to cast the spell from, but for 
    --security, determine this place on the server, don't let the player send it 
    --through remote events
    local originCF = character.HumanoidRootPart.CFrame * CFrame.new(0, 0, -3)

    spellBolt(velocity, originCF)
end

this was a very rough example that may not fit within the systems of your game, if you have any questions just ask!

Thanks for the reply, I haven’t had the chance to try it as of yet and see it an action but am nonetheless highly appreciative of your help, thank you.

Thanks for your reply, when I get the chance, I’ll try it out.

Edit: I’ve found that using raycasting along with an invisible part with a trail to work best for me.

Former contents

@Lodok3YT Thanks but I’ve found something else that suits me better.

@infranova Thanks for the help but I’ve found something that works for me.

I was reading around and found this thing called FastCast: Redux and I found that it worked better for me than your solutions. To anyone with the same kind of issue as me, here’s the asset on ROBLOX:
https://www.roblox.com/library/4453855787/FastCast-Redux