Roblox: 如何编写 VectorForce 脚本

我是 Roblox 和 Lua 的新手(两天),请不要太严厉批评我。=)

我正在尝试为我从代码生成的 Part 编写 VectorForce 脚本。 模拟附件和 VectorForce 确实创建了,但没有任何预期的效果。

请看我的脚本并告诉我需要仔细研究的地方。

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
    -- 这里:Enabled 和 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)
点赞
用户15250066
用户15250066

看起来问题在于当你创建 onTouch 函数时,你有一个参数:object。然而当你在玩家触碰部件时调用该函数时,你没有传递参数:sandblock.Touched:Connect(onTouch)。为了修复这个问题,可以这样做:sandblock.Touched:Connect(onTouch(<object_parameter>))

2021-06-08 13:33:03
用户13579159
用户13579159

解决了。

在我的力向量中,工作区重力和部件质量的乘积远大于1000。

以下代码按预期工作:

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
2021-06-10 17:22:10