Modelowanie solidów

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Modelowanie solidów to proces połączenia części w unikalny sposób, aby utworzyć bardziej skomplikowane kształty znane jako związki lub skrzyżowania .Możesz wykonać cztery solidne operacje modelowania za pomocą narzędzi w zakładce Model w pasku narzędzi.

Studio's Model tab with the Solid Modeling tools highlighted.
NarzędzieSkrótOpis
ZwiązekShiftCtrlG  (Windows) ShiftG (Mac)Połącz dwie lub więcej części, aby utworzyć jedną solidną unię.
Nakładać sięShiftCtrlI  (Windows) ShiftI (Mac)Nakładaj pokrywające się części w jedną solidną intersekcję.
OdmówShiftCtrlN  (Windows) ShiftN (Mac)Odmów części, przydatne do tworzenia otworów i odpustów.
OddzielneShiftCtrlU  (Windows) ShiftU (Mac)Oddziel związek lub skrzyżowanie z powrotem do jego poszczególnych części.

Części związanej

Narzędzie Związek łączy dwie lub więcej części, aby utworzyć jedną solidną UnionOperation .Domyślnie nowa unia respektuje właściwość Color każdej ze swoich części, choć możesz włączyć jej właściwość UsePartColor, aby zmienić całą unię na określony kolor.

Block and cylinder parts overlapping

Aby połączyć części w związek:

  1. Wybierz wszystkie części, które chcesz połączyć.
  2. Kliknij przycisk Związek . Wszystkie części łączą się w jedną solidną UnionOperation z nazwą Związek .

Przeszkodź częściom

Narzędzie Nakładanie się przecina pokrywające się części w jedną solidną IntersectOperation .Domyślnie kolory twarzy z wynikowego skrzyżowania są wypożyczane z właściwości Color oryginalnych części, choć możesz włączyć jego właściwość UsePartColor, aby zmienić całe skrzyżowanie na konkretny kolor.

Block and cylinder parts overlapping

Aby skrzyżować pokrywające się części razem:

  1. Wybierz wszystkie części, które chcesz przeciąć.
  2. Kliknij przycisk Nakładanie się . Wszystkie części łączą się w jedną solidną IntersectOperation z nazwą Nakładanie się .

Odmów części

Narzędzie Odrzucenie odrzuca część, tak że kiedy jest połączona z inną częścią, kształt odrzuconej części jest odliczany od innej części.

Negated block overlapping a cylinder

Aby odejmować część od innych pokrywających się części:

  1. Wybierz część, którą chcesz odrzucić z innych części.
  2. Kliknij Odrzuć . Część staje się NegateOperation z nazwą Negatywna część i staje się różowa i przezroczysta, aby wskazać jej stan.
  3. Wybierz zarówno odrzuconą część, jak i części, z których chcesz ją odjąć.
  4. Kliknij Związek . Odrzucona część jest wycięta z włączonych pokrywających się części.

Odrębne związki lub skrzyżowania

Narzędzie Oddzielne oddziela UnionOperation powrót do jego poszczególnych części, w zasadzie służąc jako narzędzie "odwrotne" dla związków i skrzyżowań.

Aby oddzielić związek lub skrzyżowanie z powrotem na poszczególne części:

  1. Wybierz związek lub skrzyżowanie.
  2. Kliknij Oddziel . Części oddzielają się ponownie w swojej oryginalnej formie.

Wierność renderowania

Domyślnie nowe operacje modelowania solidów zawsze będą pokazane w wierności renderowania Automatic, co oznacza, że szczegóły części są oparte na jej odległości od kamery, jak opisano w poniższej tabeli.

Odległość od kameryWierność renderowania
Mniej niż 250 kołkówNajwyższy
250-500 szpilkiŚredni
500 lub więcej szpilNajniższy

Kąt wygładzania

Właściwość solidnie wytworzonej części modelowanej SmoothingAngle łagodzi kąty między sąsiednimi powierzchniami tej samej koloru lub materiału.Wyższa wartość wygląda bardziej gładko, podczas gdy niższa wartość wygląda bardziej nieostro z większą ilością ostrych krawędzi.

Podczas gdy wartość pomiędzy 30 a 70 stopniami zwykle daje dobry wynik, wartości pomiędzy 90 a 180 nie są zalecane, ponieważ mogą spowodować efekt "cienia" na związkach i skrzyżowaniach z ostrymi krawędziami.

Modelowanie solidów w doświadczeniu

Oprócz narzędzi Związek , Przecięcie i Odrzucenie w Studio możesz pozwolić graczom na korzystanie z solidnych operacji modelowania w środku doświadczenia za pomocą UnionAsync(), IntersectAsync() i SubtractAsync().Wszystkie te metody muszą być wywołane na BasePart i wszystkie wymagają matrycy jednej lub więcej części, które mają się połączyć, zbiegać się lub odliczać od części wzywającej.

UnionAsync()

Aby pokazać UnionAsync() , następujące Script korzysta z Część1 BasePart z przestrzeni roboczej, łączy je z Część2 , Część3 i Część4 BaseParts , następnie rodzice wynikowe UnionOperation do przestrzeni roboczej w oryginalnej pozycji Część1 .


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3, Workspace.Part4}
-- Wykonaj operację związania
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- Jeśli operacja się powiedzie, umieść ją w tej samej lokalizacji i powiąż z przestrzenią roboczą
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- Zniszcz oryginalne części, które pozostają nienaruszone po operacji
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

IntersectAsync()

Aby pokazać IntersectAsync() , następujące Script korzysta z Część1 BasePart z przestrzeni roboczej, skrzyżowuje ją z Część2 i Część3 BaseParts , a następnie rodzice wynikowe IntersectOperation do przestrzeni roboczej w oryginalnej pozycji Część1 .


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3}
-- Wykonaj operację przecięcia
local success, newIntersect = pcall(function()
return mainPart:IntersectAsync(otherParts)
end)
-- Jeśli operacja się powiedzie, umieść ją w tej samej lokalizacji i powiąż z przestrzenią roboczą
if success and newIntersect then
newIntersect.Position = mainPart.Position
newIntersect.Parent = Workspace
end
-- Zniszcz oryginalne części, które pozostają nienaruszone po operacji
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

OdejmijAsync()

Aby pokazać , następujące korzysta z Część1 z przestrzeni roboczej, zaprzecza Część2 , Część3 i Część4 z niej, a następnie rodzice wynikającego do przestrzeni roboczej w oryginalnej pozycji Część1 .


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3, Workspace.Part4}
-- Wykonaj operację odliczania
local success, newSubtract = pcall(function()
return mainPart:SubtractAsync(otherParts)
end)
-- Jeśli operacja się powiedzie, umieść ją w tej samej lokalizacji i powiąż z przestrzenią roboczą
if success and newSubtract then
newSubtract.Position = mainPart.Position
newSubtract.Parent = Workspace
end
-- Zniszcz oryginalne części, które pozostają nienaruszone po operacji
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end