Как вы получаете положение стороны блока, чтобы вы могли поместить блок идеально рядом с блоком - PullRequest
0 голосов
/ 07 июня 2019

Например, изображение двух блоков,

Part1 и Part2 , Part1 помещается в игру как обычный блок, а Part2 помещается в игруиспользуя сценарий, затем перед тем, как поместить его в рабочую область, сценарий получает боковую позицию Part1, затем помещает позицию Part2 в качестве стороны Part1, а затем помещает ее в рабочее пространство.

Так что Part2 будет идеально следующейЧасть 1.

1 Ответ

0 голосов
/ 08 июня 2019

Предполагая, что вы имеете в виду простые детали без операций CSG, вы можете выполнить простую математику, чтобы выстроить их в ряд.

Попробуйте что-то вроде этого:

local function createRandomBlock(name, brickColor)
    -- create a randomly sized block
    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

-- place part 1 floating in the air, rotated randomly
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

-- start placing blocks relative to the test block
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)

В этом примере помещаетсяблок в начале координат и ориентирует его случайным образом.Затем он добавляет детали и прикрепляет их по бокам тестового блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...