有没有办法在ROBLOX中通过任何自然数值调整Surface的大小?

时间:2016-02-20 19:29:03

标签: lua roblox

我一直在使用Roblox Studio中的内置Resize功能,并一直使用它来扩展多个部件的顶部表面,以形成类似墙的结构。

使用此方法时出现的唯一问题是所创建的墙的表面不均匀:某些部件比其他部件高。

我后来发现这个问题是由于内置的​​Resize函数只将整数作为第二个参数(或“expand-by”值)。理想情况下,我需要部件能够扩展任何实数。

是否有内置Resize函数的替代方法,允许用任何实数来调整Surface的大小?

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,但它实际上需要一个自定义功能。通过一些相当基本的数学,我们可以编写一个简单的函数来完成这样的任务:

local Resize
do
    local directions = {
        [Enum.NormalId.Top] = {Scale=Vector3.new(0,1,0),Position=Vector3.new(0,1,0)},
        [Enum.NormalId.Bottom] = {Scale=Vector3.new(0,1,0),Position=Vector3.new(0,-1,0)},
        [Enum.NormalId.Right] = {Scale=Vector3.new(1,0,0),Position=Vector3.new(1,0,0)},
        [Enum.NormalId.Left] = {Scale=Vector3.new(1,0,0),Position=Vector3.new(-1,0,0)},
        [Enum.NormalId.Front] = {Scale=Vector3.new(0,0,1),Position=Vector3.new(0,0,1)},
        [Enum.NormalId.Back] = {Scale=Vector3.new(0,0,1),Position=Vector3.new(0,0,-1)},
    }

    function Resize(p, d, n, c)
        local prop = c and 'Position' or 'CFrame'
        p.Size = p.Size + directions[d].Scale*n
        p[prop] = p[prop] + directions[d].Position*(n/2)
        return p.Size, p[prop]
    end
end


Resize(workspace.Part, Enum.NormalId.Bottom, 10, false) --Resize workspace.Part downards by 10 studs, ignoring collisions

如果你对这段代码的工作方式和原因有更多的兴趣,这里有一个指向加载了注释的pastebin的链接,我觉得这里的答案相当丑陋:http://pastebin.com/LYKDWZnt < / p>