Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Laser Gun Beam Not Shooting In Correct Direction?

Asked by 1 year ago

This is a repost because my last post got 80 views but no one is commenting or answering so I want to get people to notice because it is a real problem I can't fix.

Hello developers. I am currently making a laser gun with a long laser beam that shoots out when you click. However, the laser beam doesn't go straight, but it goes to the center of the object I am shooting at. I was wondering how I could make the laser beam go straight no matter what is in the way and so it doesn't just go to the center of the object.

Here is the local script located in the laser gun:

function CreateBullet(Origin, Direction)
    local MidPoint = Origin.Position + Direction/2

    local beam = Instance.new("Part", nil)
    beam.Name = "LaserBullet"
    beam.Anchored = true
    beam.CanCollide = false
    beam.Massless = true
    beam.Locked = true
    beam.Parent = workspace
    beam.BrickColor = Player.TeamColor
    beam.Material = Enum.Material.Neon
    beam.Transparency = 0
    beam.Size = Vector3.new(0.05, 0.05, Direction.Magnitude)
    beam.Orientation = Origin.Orientation
    beam.CFrame = CFrame.new(MidPoint, Origin.Position)

    -- + Vector3.new(3,-.5,0)

    Debris:AddItem(beam, 1)

    beam.Touched:Connect(function(Result)
        if Result and Result.Parent:FindFirstChild("Humanoid") and hitDebounce == false then
            hitDebounce = true
            local humanoid = Result.Parent:FindFirstChild("Humanoid")

            if humanoid and humanoid ~= Player.Character.Humanoid then
                if Result.Name == "Head" then
                    humanoid:TakeDamage(ConfigScript.CriticalDamage)
                else
                    humanoid:TakeDamage(ConfigScript.NormalDamage)
                end
            end
            wait(1)
            hitDebounce = false
        end
    end)

    for i= 0,1,0.1 do
        beam.Transparency = beam.Transparency + .1
        wait(.1)
    end
end

function Shoot(target)
    if not ShootCooldown and script.Parent.CurrentAmmo.Value > 0 and ReloadDebounce == false then
        ShootCooldown = true
        script.Parent.CurrentAmmo.Value -= 1
            if GunScreen.Visible == true then
                GunScreen.Screen.Ammo.Text = "Ammo: "..tostring(gun.CurrentAmmo.Value).."/"..tostring(gun.MaxAmmo.Value)
                if ReplicatedStorage.Settings.AutoReload.Value == true and script.Parent.CurrentAmmo.Value == 0 then
                    Reload()
                end
            end
        if Player.Character:FindFirstChild(script.Parent.Name) then
            local sin = math.sin(tick()*RecoilSize)/RecoilSize
            CF = CF:Lerp(CFrame.new(ConfigScript.OffsetFromCamera.X, ConfigScript.OffsetFromCamera.Y,ConfigScript.OffsetFromCamera.Z+sin),.1)
            ReplicatedStorage.LaserGunShootingSound:Play()
            local Origin = gun.Origin
            local Direction = (Mouse.Hit.Position - Origin.Position).Unit * ((Mouse.Hit.Position - Origin.Position).Magnitude)
            CreateBullet(Origin, Direction)
            wait(ConfigScript.Cooldown_Between_Each_Click)
            ShootCooldown = false
        end
    elseif script.Parent.CurrentAmmo.Value <= 0 then
        GunScreen.Screen.Loaded.Text = "Must Reload!"
        ReplicatedStorage.ErrorSound:Play()
        ReplicatedStorage.ErrorSound.Stopped:Wait(.8)
    end
end

Thanks for reading!

Answer this question