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

Bullets are not going through objects without collisions?

Asked by 4 years ago

I'm working on a gun right now which fires out bullets. I want them to go through objects that have collision turned off (borders, hidden parts, etc.), but they stop when they reach the object. Also hit.Name can't seem to detect the bullet. It'll return the name for any object that touches the parent of a script that has it but it can't detect the bullet.

Here's the server script. I got most of it off of a tutorial here: https://devforum.roblox.com/uploads/short-url/WQW6iS1i344HHrPXbvyIA1pUWV.rbxl and the page that goes along with it is here: https://devforum.roblox.com/t/how-to-make-ranged-weapons-with-bullet-movement/606618/2

Any help is appreciated :) I'm new to Lua scripting so I would prefer answers that give me the entire working script to copy and paste in.

Once again, the problems are that the bullets don't go through objects with collisions and that other objects cannot detect a hit by them. This is only part of the weapon so it'll help to reference the whole tutorial for the other parts and scripts.

local weapon = script.Parent

local fireRemote = weapon.Fire

local configs = weapon.Configuration

local speed = configs.Speed.Value
local dropDistance = configs.DropDistance.Value
local damage = configs.Damage.Value
local dropAngle = configs.DropAngle.Value

local function CreateFire(startPosition, direction)
    local ray, object, position

    local bullet = Instance.new("Part")
    bullet.Name = "Bullet"
    bullet.FormFactor = Enum.FormFactor.Custom
    bullet.Anchored = true
    bullet.CanCollide = false
    bullet.Massless = true
    bullet.Locked = true
    bullet.Parent = game.Workspace

    local function RayCast()
        ray = Ray.new(bullet.CFrame.p, bullet.CFrame.LookVector * speed)
        object, position = game.Workspace:FindPartOnRayWithIgnoreList(ray, {weapon.Parent}, false, true)

        local dropDamageModifier = (position - startPosition).Magnitude/dropDistance
        local _damage = damage/dropDamageModifier

        if _damage > damage then
            _damage = damage
        end

        if _damage < 1 then
            _damage = 0
            game:GetService("Debris"):AddItem(bullet, 0.01)
            bullet = nil
        end

        if object and bullet then
            local humanoid = object.Parent:FindFirstChildWhichIsA("Humanoid")
            if humanoid then
                    humanoid:TakeDamage(_damage)
            end
            game:GetService("Debris"):AddItem(bullet, 0.01)
            bullet = nil
        end
    end

    bullet.Color = Color3.fromRGB(255, 150, 0)
    bullet.Material = Enum.Material.Neon
    bullet.Transparency = 0

    bullet.Size = Vector3.new(0.2, 0.2, 2)

    bullet.CFrame = CFrame.new(startPosition, startPosition + direction) * CFrame.new(0, 0, 1.4)
    RayCast()

    local createBulletTrajectory = coroutine.wrap(function()
        while bullet do
            bullet.CFrame = bullet.CFrame * CFrame.new(0, 0, -speed) * CFrame.Angles(-dropAngle, 0, 0)

            RayCast()

            wait()
        end
    end)
    createBulletTrajectory()
end


fireRemote.OnServerEvent:Connect(function(player, mousePos, startPos)
    local direction = (mousePos - startPos).Unit

    CreateFire(startPos, direction)
end)
0
Line 41, try `if object and bullet and object.CanCollide then` Block_manvn 395 — 4y
0
@Block_manvn It pushes the player when it hits though, and it still doesn't fix the bullet collision detection issue with other parts. Bob4koolest 78 — 4y

Answer this question