Search code examples
luaroblox

Roblox: how to script VectorForce


I'm very new (2 days) to Roblox and Lua, so don't bite me too hard please.. =)

What I am trying to do is to script VectorForce for the Part I've also instanced from code. In simulation Attachment and VectorForce did create, but without any expected effect.

Please, look at my script and tell me where do I need to dig.

local sandblock = script.Parent
local sandblock_health = 5

local function blockJump(object)
    local jump_att = Instance.new("Attachment", object)
    local jump_force = Instance.new("VectorForce", object)
    jump_force.ApplyAtCenterOfMass = true
    jump_force.Attachment0 = jump_att
    jump_force.RelativeTo = Enum.ActuatorRelativeTo.World
    jump_force.Force = Vector3.new(10,1000,-10)
    jump_force.Enabled = true
    -- here: what is the difference between Enabled and Active?
    --jump_force.Active = true
end

local function onTouch(object)
    --print("К блоку прикоснулся "..object.Name)
    if object.Name == "Handle" then
        sandblock_health = sandblock_health - 1
        print(sandblock_health)
        
        if sandblock_health < 1 then
            local sandblock_drop1 = Instance.new("Part", workspace)
            sandblock_drop1.Size = Vector3.new(2,2,2)
            sandblock_drop1.Position = sandblock.Position + Vector3.new(0,5,-1)
            blockJump(sandblock_drop1)
            sandblock_drop1.Material = "Metal"
            sandblock_drop1.BrickColor = BrickColor.new("Gold")
            sandblock_drop1.Name = "Gold"
            
            print("Вы добыли "..sandblock_drop1.Name)
            sandblock:Destroy()
        end
    end
end

sandblock.Touched:Connect(onTouch)

Solution

  • Solved it. The product of workspace's gravity and part's mass is much higher than 1000 in my Force vector.

    Code below works as expected:

    jump_force.Force = Vector3.new(10, game.Workspace.Gravity * object.Mass * 1.35, -10)
    jump_force.Enabled = true
    wait(0.4)
    jump_force.Enabled = false