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!