如何获得方块的侧面位置,以便您可以完美地将另一个方块放置在它旁边

一个示例,图像两个块,

Part1Part2,Part1在游戏中被放置为正常块,而Part2使用脚本放置到游戏中,然后在将其放置到工作区之前,脚本获取Part1的侧面位置,然后将Part2的位置放置为Part1的侧面,然后将其放置到工作区中。

然后Part2将完美地位于Part1旁边。

点赞
用户2860267
用户2860267

假设您的意思是没有 CSG 操作的简单零件,您可以进行一些简单的数学计算来将它们排列起来。

尝试这样做:

local function createRandomBlock(name, brickColor)
    -- 创建一个随机大小的块
    local part = Instance.new("Part")
    part.Name = name
    part.Size = Vector3.new(math.random(1,10), math.random(1,10), math.random(1,10))
    part.BrickColor = brickColor
    part.Anchored = true
    part.CanCollide = false
    part.Transparency = 0.5
    part.Parent = game.Workspace
    part.BottomSurface = Enum.SurfaceType.Smooth
    part.TopSurface = Enum.SurfaceType.Smooth

    return part
end

-- 将零件 1 置于空中,随机旋转
local twoPi = 2 * math.pi
local testCFrame = CFrame.new(Vector3.new(0,10,0))
testCFrame = testCFrame * CFrame.Angles(math.random(0,twoPi), math.random(0,twoPi), math.random(0,twoPi))

local testBlock = createRandomBlock("Test", BrickColor.White())
testBlock.CFrame = testCFrame

-- 相对于测试块开始放置块
local pFront = createRandomBlock("Front", BrickColor.Red())
pFront.CFrame = testBlock.CFrame + (testBlock.CFrame.LookVector * (testBlock.Size.Z + pFront.Size.Z) * 0.5)

local pBack = createRandomBlock("Back", BrickColor.Red())
pBack.CFrame = testBlock.CFrame + (-1 * testBlock.CFrame.LookVector * (testBlock.Size.Z + pBack.Size.Z) * 0.5)

local pRight = createRandomBlock("Right", BrickColor.Blue())
pRight.CFrame = testBlock.CFrame + (testBlock.CFrame.RightVector * (testBlock.Size.X + pRight.Size.X) * 0.5)

local pLeft = createRandomBlock("Left", BrickColor.Blue())
pLeft.CFrame = testBlock.CFrame + (-1 * testBlock.CFrame.RightVector * (testBlock.Size.X + pLeft.Size.X) * 0.5)

local pTop = createRandomBlock("Top", BrickColor.Green())
pTop.CFrame = testBlock.CFrame + (testBlock.CFrame.UpVector * (testBlock.Size.Y + pTop.Size.Y) * 0.5)

local pBottom = createRandomBlock("Bottom", BrickColor.Green())
pBottom.CFrame = testBlock.CFrame + (-1 * testBlock.CFrame.UpVector * (testBlock.Size.Y + pBottom.Size.Y) * 0.5)

这个例子将一个块放置在原点并随机定向。然后它添加零件并将它们粘在测试块的侧面。

2019-06-07 22:17:28