我一直在使用Roblox Studio中的内置Resize功能,并一直使用它来扩展多个部件的顶部表面,以形成类似墙的结构。
使用此方法时出现的唯一问题是所创建的墙的表面不均匀:某些部件比其他部件高。
我后来发现这个问题是由于内置的Resize函数只将整数作为第二个参数(或“expand-by”值)。理想情况下,我需要部件能够扩展任何实数。
是否有内置Resize函数的替代方法,允许用任何实数来调整Surface的大小?
答案 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>