ROBLOX 中有什么方法可以将表面大小调整为自然数值吗?

我一直在使用 Roblox Studio 中内置的 Resize 函数,将多个零件的顶部表面扩展,以形成类似墙壁的结构。

使用这种方法时唯一出现的问题是创建的墙面不平整:有些零件比其他零件高。

后来我发现,这个问题是由于内置的 Resize 函数仅以整数作为其第二个参数(或“扩展值”)而引起的。理想情况下,我需要让零件能够按任意实数扩展。

有没有替代的 Resize 函数可以通过任意实数调整表面大小呢?

点赞
用户3979429
用户3979429

是的,这是可能的,但实际上需要一个自定义函数才能实现。通过一些非常基本的数学,我们可以编写一个简单的函数来完成这项任务:

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 向下缩小 10 个单位,忽略碰撞

如果您想了解更多关于此代码如何以及为什么以这种方式工作的信息,这里是一个装满注释的 pastebin 链接,我认为对于这里的答案来说会相当丑陋:http://pastebin.com/LYKDWZnt

2016-02-20 19:32:36