BasePart

Pokaż przestarzałe

*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.

Brak możliwości tworzenia
Brak możliwości przeglądania

BasePart jest abstrakcyjną klasą podstawową dla obiektów w świecie, które renderują i są fizycznie symulowane podczas pobytu w Workspace.Istnieje kilka implementacji BasePart , najczęstsza z nich to Part i MeshPart .Inne obejmują WedgePart , SpawnLocation , i obiekt singleton Terrain.Ogólnie rzecz biorąc, gdy dokumentacja odnosi się do "części", większość BasePart implementacji będzie działać, a nie tylko Part.

Aby uzyskać informacje o tym, w jaki sposób BaseParts są grupowane w symulowanych sztywnych ciałach, zobacz zespoły .

Istnieje wiele różnych obiektów, które wchodzą w interakcję z BasePart (inne niż Terrain), w tym:

Podsumowanie

Właściwości

Właściwości odziedziczeni z: PVInstance
  • Bez replikacji
    Brak możliwości dodawania do skryptu
    Odczyt równoległy
  • Bez replikacji
    Brak możliwości dodawania do skryptu
    Odczyt równoległy

Metody

Metody odziedziczeni z: PVInstance

Zdarzenia

Właściwości

Anchored

Odczyt równoległy

Właściwość Anchored określa, czy część będzie nieruchoma zgodnie z fizyką.Gdy włączone, część nigdy nie zmieni pozycji z powodu grawitacji, kolizji z innymi częściami, pokrywania innych części lub z innych przyczyn związanych z fizyką.W wynikdwie zakotwiczone części nigdy nie wystrzelą wydarzenia Touched na siebie nawzajem.

Przyczepiona część może nadal być przesuwana poprzez zmianę jej CFrame lub Position , a nadal może mieć niezerową AssemblyLinearVelocity i AssemblyAngularVelocity.

Wreszcie, jeśli niezakotwiczone części są połączone z zakotwiczoną częścią za pomocą obiektu takiego jak Weld, również będą działać zakotwiczone.Jeśli taka stawka pęknie, część może ponownie zostać dotknięta przez fizykę.Zobacz Zbiórki dla więcej szczegółów.

Nie można ustawić własności sieci na zakotwiczone części.Jeśli status zakotwiczenia części zmieni się na serwerze, własność sieciowa tej części zostanie uszkodzona.

Przykłady kodu

This code sample will allow a part to be clicked to toggle its anchored property. When toggled, the visual appearance of the part is updated (red means anchored, yellow means free).

Part Anchored Toggle

local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)

AssemblyAngularVelocity

Bez replikacji
Odczyt równoległy

Wektor prędkości kątowej montażu tej części. Jest to szybkość zmiany orientacji w radach na sekundę.

Prędkość kątowa jest taka sama na każdym punkcie montażu.

Ustawienie prędkości bezpośrednio może doprowadzić do nierealistycznego ruchu.Wykorzystanie Torque lub AngularVelocity ograniczenia jest preferowane, lub użyj ApplyAngularImpulse() jeśli chcesz natychmiastową zmianę prędkości.

Jeśli część jest własnością serwera, właściwość ta musi zostać zmieniona z serwera Script (nie z LocalScript lub Script z ustawieniem RunContext na Enum.RunContext.Client).Jeśli część jest własnością klienta poprzez automatyczne własność, właściwość tę można zmienić zarówno z kodu klienta lub ze skryptu serwera; zmiana z kodu klienta dla części własnej serwera nie będzie miała żadnego wpływu.

AssemblyCenterOfMass

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Pozycja obliczana za pomocą Mass i Position wszystkich części w złożeniu.

Jeśli złożenie ma część zakotwiczoną, centrum masy tej części będzie centrum masy złożenia, a złożenie będzie miało nieskończoną masę.

Znajomość centrum masy może pomóc utrzymać stabilność montażu.Siła zastosowana do centrum masy nie spowoduje przyspieszenia kątowego, tylko liniowego.Zbiór z niskim środkiem masy będzie miał lepszy czas utrzymywania się w pozycji pionowej pod wpływem grawitacji.

AssemblyLinearVelocity

Bez replikacji
Odczyt równoległy

Wektor prędkości liniowej z montażem tej części. Jest to szybkość zmiany pozycji AssemblyCenterOfMass w szpilkach na sekundę.

Jeśli chcesz poznać prędkość w punkcie innym niż środek masy złożenia, użyj GetVelocityAtPosition().

Ustawienie prędkości bezpośrednio może doprowadzić do nierealistycznego ruchu.Wolno używać ograniczenia VectorForce lub używać ApplyImpulse(), jeśli chcesz natychmiastową zmianę prędkości.

Jeśli część jest własnością serwera, właściwość ta musi zostać zmieniona z serwera Script (nie z LocalScript lub Script z ustawieniem RunContext na Enum.RunContext.Client).Jeśli część jest własnością klienta poprzez automatyczne własność, właściwość tę można zmienić zarówno z kodu klienta lub ze skryptu serwera; zmiana z kodu klienta dla części własnej serwera nie będzie miała żadnego wpływu.

AssemblyMass

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Suma masy wszystkich BaseParts w zgromadzeniu tej części.Części, które są Massless i nie są częścią korzenną złożenia, nie przyczynią się do AssemblyMass.

Jeśli złożenie ma część zakotwiczoną, masa złożenia jest uważana za nieskończoną.Ograniczenia i inne fizyczne interakcje między niezakotwiczone zespoły z dużą różnicą w masie mogą powodować niestabilności.

AssemblyRootPart

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta wskazuje na BasePart automatycznie wybraną do reprezentowania części korzeniowej zbioru.Jest to ta sama część, która zostaje zwrócona, gdy programiści wywołują GetRootPart() .

Część korzenna może zostać zmieniona poprzez zmianę RootPriority części w złożeniu.

Części, które wszystkie mają tę samą AssemblyRootPart są w tej samej zbiórce.

Aby uzyskać więcej informacji o częściach korzeniowych, zobacz Zbiórki.

AudioCanCollide

Odczyt równoległy

AudioCanCollide określa, czy część będzie fizycznie interakcjonować z symulacją dźwięku, podobnie jak CastShadow dla oświetlenia.

Gdy jest wyłączone, dźwięk przechodzi przez część; nie jest zablokowany ani odbity.

BackSurface

Odczyt równoległy

Właściwość BackSurface określa rodzaj powierzchni używanej do pozytywnego kierunku Z części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.

BottomSurface

Odczyt równoległy

Właściwość BottomSurface określa rodzaj powierzchni używanej do negatywnego kierunku Y części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.

BrickColor

Bez replikacji
Odczyt równoległy

Właściwość ta określa kolor części.Jeśli część ma Material, to również określa kolor używany przy renderowaniu tekstury materiału.Aby uzyskać większą kontrolę nad kolorem, można użyć właściwości Color, a ta właściwość będzie używać najbliższego BrickColor.

Inne wizualne właściwości części są określone przez Transparency i Reflectance.

CFrame

Odczyt równoległy

Właściwość CFrame określa pozycję i orientację BasePart w świecie.Działa jako losowe miejsce odniesienia w geometrii, ale ExtentsCFrame reprezentuje rzeczywisty CFrame jego fizycznego centrum.

Podczas ustawiania CFrame na części inne dołączone części są również przesuwane względem części, ale zaleca się użycie PVInstance:PivotTo() do przesunięcia całego modelu, takiego jak teleportacja postaci gracza.

W przeciwieństwie do ustawienia BasePart.Position, ustawienie CFrame zawsze przeniesie część do dokładnie podanych CFrame ; innymi słowy: nie wykonywane jest sprawdzanie pokrycia i rozwiązanie fizyczne będzie próbować rozwiązać każde pokrycie, chyba że obie części nie są Anchored .

Aby śledzić pozycje względem części CFrame, może być przydatny Attachment.

Przykłady kodu

Ten przykład kodu pokazuje ustawienie CFrame części na wiele różnych sposobów.Pokazuje, jak tworzyć i łączyć wartości CFrame.Odnosi się do części siostrzanej o nazwie "Inna część" dla pokazania pozycjonowania względnego.

Ustawienie części CFrame

local part = script.Parent:WaitForChild("Part")
local otherPart = script.Parent:WaitForChild("OtherPart")
-- Zresetuj CFrame części do (0, 0, 0) bez obrotu.
-- Nazywa się to czasami "identyfikatorem" CFrame
part.CFrame = CFrame.new()
-- Ustaw na określoną pozycję (X, Y, Z)
part.CFrame = CFrame.new(0, 25, 10)
-- Tak samo jak powyżej, ale zamiast tego użyj Vector3
local point = Vector3.new(0, 25, 10)
part.CFrame = CFrame.new(point)
-- Ustaw, aby CFrame części był na jednym punkcie, patrząc na inny
local lookAtPoint = Vector3.new(0, 20, 15)
part.CFrame = CFrame.lookAt(point, lookAtPoint)
-- Obróć CFrame części o pi/2 radianów na lokalnej osi X
part.CFrame = part.CFrame * CFrame.Angles(math.pi / 2, 0, 0)
-- Obróć CFrame części o 45 stopni na lokalnej osi Y
part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(45), 0)
-- Obróć CFrame części o 180 stopni na globalnej osi Z (zwróć uwagę na kolejność!)
part.CFrame = CFrame.Angles(0, 0, math.pi) * part.CFrame -- Pi radianów jest równy 180 stopniom
-- Składanie dwóch ram C jest wykonywane za pomocą * (operator mnożenia)
part.CFrame = CFrame.new(2, 3, 4) * CFrame.new(4, 5, 6) --> równy CFrame.new(6, 8, 10)
-- W przeciwieństwie do mnożenia algebraicznego, kompozycja CFrame nie jest komunikatywna: a * b niekoniecznie jest b * a!
-- Wyobraź sobie * jako uporządkowaną serię działań. Na przykład następujące linie wytwarzają różne CFramy:
-- 1) Przesuń jednostki części 5 na X.
-- 2) Obróć część o 45 stopni wokół osi Y.
part.CFrame = CFrame.new(5, 0, 0) * CFrame.Angles(0, math.rad(45), 0)
-- 1) Obróć część o 45 stopni wokół osi Y.
-- 2) Przesuń jednostki części 5 na X.
part.CFrame = CFrame.Angles(0, math.rad(45), 0) * CFrame.new(5, 0, 0)
-- Nie ma "podziału CFrame", ale zamiast tego po prostu "wykonuje się odwrotną operację".
part.CFrame = CFrame.new(4, 5, 6) * CFrame.new(4, 5, 6):Inverse() --> jest równy CFrame.new(0, 0, 0)
part.CFrame = CFrame.Angles(0, 0, math.pi) * CFrame.Angles(0, 0, math.pi):Inverse() --> równy CFrame.Angles(0, 0, 0)
-- Pozycjonuj część względem innej (w tym przypadku umieść naszą część na górze innej części)
part.CFrame = otherPart.CFrame * CFrame.new(0, part.Size.Y / 2 + otherPart.Size.Y / 2, 0)

CanCollide

Odczyt równoległy

CanCollide określa, czy część będzie fizycznie interakcjonować z innymi częściami.Gdy jest wyłączony, inne części mogą przejść przez część bez przerw.Części używane do dekoracji zwykle mają wyłączone CanCollide, ponieważ nie muszą być rozważane przez silnik fizyczny.

Jeśli część nie jest Anchored i ma wyłączone CanCollide, może wypaść z świata, aby ostatecznie zostać zniszczona przez Workspace.FallenPartsDestroyHeight.

Gdy CanCollide jest wyłączone, części mogą nadal wystrzelić wydarzenie Touched (jak również pozostałe części, które je dotykają).Możesz to wyłączyć za pomocą CanTouch.

Aby uzyskać więcej informacji o kolizjach, zobacz Kolizje.

Przykłady kodu

This code sample shows how a part can fade away when touched by a Humanoid then reappear a moment after to create a passable door.

Fade Door

-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()

CanQuery

Odczyt równoległy

Właściwość ta określa, czy część jest rozważana podczas operacji zapytania przestrzennego, takich jak GetPartBoundsInBox lub Raycast.Zauważ, że musi być wyłączone, aby weszło w życie, a funkcje zapytania przestrzennego nigdy nie będą zawierać części z .

Poza właściwością tą możliwe jest również wykluczenie części, które są potomkami danej listy części za pomocą obiektu OverlapParams lub RaycastParams podczas wywoływania funkcji zapytania przestrzennego.

CanTouch

Odczyt równoległy

Właściwość ta określa, czy zdarzenia Touched i TouchEnded wystrzelają z części.Jeśli true , inne dotykające części muszą również mieć CanTouch ustawione na true , aby uruchomić zdarzenia dotykowe.Jeśli false , wydarzenia dotykowe nie mogą zostać skonfigurowane dla części i próba ich wykonania spowoduje wystąpienie błędu.Podobnie, jeśli właściwość jest ustawiona na false po połączeniu wydarzenia dotykowego, wydarzenie zostanie odłączone, a TouchTransmitter usunięte.

Zauważ, że ta logika kolizji może być ustawiona na respektowanie grup kolizyjnych poprzez właściwość Workspace.TouchesUseCollisionGroups.Jeśli true , części w niezderzających się grupach zignorują oba zdarzenia kolizyjne i , co czyni tę właściwość nieistotną.

Wydajność

Istnieje niewielka poprawa wydajności w częściach, które mają zarówno CanTouch i CanCollide ustawione na false, ponieważ te części nigdy nie będą musiały obliczać żadnego rodzaju kolizji między częściami.Jednak nadal mogą być atakowane przez Raycasts i OverlapParams zapytania.

CastShadow

Odczyt równoległy

Określa, czy część rzuca cień, czy nie.Wyłączenie tej właściwości dla danego części może spowodować wizualne artefakty na cieniach rzucanych na tę część.

Właściwość ta nie jest przeznaczona do poprawy wydajności, ale w skomplikowanych scenach wyłączenie jej na niektórych częściach może poprawić wykonywanie.Ze względu na możliwość wystąpienia artefaktów wizualnych zalecamy pozostawienie go włączone na wszystkich częściach w większości sytuacji.

CenterOfMass

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość CenterOfMass opisuje lokalną pozycję centrum masy części.Jeśli jest to pojedyncze złożenie części, jest to AssemblyCenterOfMass przekształcone z przestrzeni świata na lokalną.Na prostym Parts , centrum masy zawsze jest (0, 0, 0) , ale może się różnić dla WedgePart lub MeshPart .

CollisionGroup

Bez replikacji
Odczyt równoległy

Właściwość CollisionGroup opisuje nazwę grupy kolizji części (maksymalnie 100 znaków).Części rozpoczynają się w domyślnej grupie, której nazwa to "Default" .Ta wartość nie może być pusta.

Chociaż ta sama właściwość nie jest replikowana, silnik replikuje wewnętrznie wartość za pomocą innej prywatnej własności, aby rozwiązać problemy z kompatybilnością wsteczną.

Przykłady kodu

This example demonstrates one basic use of collision groups. It assigns BallPart to "CollisionGroupBall" and DoorPart to "CollisionGroupDoor", then makes the two groups non-collidable using PhysicsService:CollisionGroupSetCollidable().

PhysicsService:RegisterCollisionGroup

local PhysicsService = game:GetService("PhysicsService")
local collisionGroupBall = "CollisionGroupBall"
local collisionGroupDoor = "CollisionGroupDoor"
-- Register collision groups
PhysicsService:RegisterCollisionGroup(collisionGroupBall)
PhysicsService:RegisterCollisionGroup(collisionGroupDoor)
-- Assign parts to collision groups
script.Parent.BallPart.CollisionGroup = collisionGroupBall
script.Parent.DoorPart.CollisionGroup = collisionGroupDoor
-- Set groups as non-collidable with each other and check the result
PhysicsService:CollisionGroupSetCollidable(collisionGroupBall, collisionGroupDoor, false)
print(PhysicsService:CollisionGroupsAreCollidable(collisionGroupBall, collisionGroupDoor)) --> false

Color

Bez replikacji
Odczyt równoległy

Właściwość Color określa kolor części.Jeśli część ma Material, to również określa kolor używany przy renderowaniu tekstury materiału.

Jeśli ta właściwość jest ustawiać, BrickColor użyje najbliższego dopasowania do tej wartości Color.

Inne wizualne właściwości części są określone przez Transparency i Reflectance.

Przykłady kodu

Ten przykład kodu koloruje całą postać gracza w oparciu o to, ile ma zdrowia.Generuje kolor w oparciu o ich maksymalne zdrowie, a następnie ustawia właściwości kolorowe obiektów w ich postaci, usuwając dodatkowe obiekty.

Kolor ciała zdrowia postaci

-- Wklej do skryptu w ramach StarterCharacterScripts
-- Następnie zagraj w grę i baw się zdrowiem swojej postaci
local char = script.Parent
local human = char.Humanoid
local colorHealthy = Color3.new(0.4, 1, 0.2)
local colorUnhealthy = Color3.new(1, 0.4, 0.2)
local function setColor(color)
for _, child in pairs(char:GetChildren()) do
if child:IsA("BasePart") then
child.Color = color
while child:FindFirstChildOfClass("Decal") do
child:FindFirstChildOfClass("Decal"):Destroy()
end
elseif child:IsA("Accessory") then
child.Handle.Color = color
local mesh = child.Handle:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh.TextureId = ""
end
elseif child:IsA("Shirt") or child:IsA("Pants") then
child:Destroy()
end
end
end
local function update()
local percentage = human.Health / human.MaxHealth
-- Stwórz kolor poprzez przesuwanie w oparciu o procent twojego zdrowia
-- Kolor przechodzi od kolorHealthy (100%) ----- > colorUnhealthy (0%)
local color = Color3.new(
colorHealthy.R * percentage + colorUnhealthy.r * (1 - percentage),
colorHealthy.G * percentage + colorUnhealthy.g * (1 - percentage),
colorHealthy.B * percentage + colorUnhealthy.b * (1 - percentage)
)
setColor(color)
end
update()
human.HealthChanged:Connect(update)

CurrentPhysicalProperties

Tylko do odczytu
Bez replikacji
Odczyt równoległy

CurrentPhysicalProperties wskazuje aktualne właściwości fizyczne części.Możesz ustawić niestandardowe wartości dla właściwości fizycznych na część, niestandardowy materiał i przejęcie materiału.Silnik Roblox priorytetuje bardziej granularne definicje przy określaniu skutecznych właściwości fizycznych części.Wartości w następującej liście są w kolejności od najwyższego do najniższego priorytetu:

  • Niestandardowe właściwości fizyczne części
  • Niestandardowe właściwości fizyczne materiału niestandardowego części
  • Niestandardowe właściwości fizyczne odwrócenia materiału części
  • Domyślne właściwości fizyczne materiału części

CustomPhysicalProperties

Odczyt równoległy

CustomPhysicalProperties pozwala dostosować różne fizyczne aspekty części, takie jak jej gęstość, tarcie i elastyczność.

Jeśli włączone, ta właściwość pozwala skonfigurować te fizyczne właściwości.Jeśli są wyłączone, te właściwości fizyczne są określane przez Material części.

Przykłady kodu

This code sample demonstrates how to set the CustomPhysicalProperties property of a part.

Set CustomPhysicalProperties

local part = script.Parent
-- This will make the part light and bouncy!
local DENSITY = 0.3
local FRICTION = 0.1
local ELASTICITY = 1
local FRICTION_WEIGHT = 1
local ELASTICITY_WEIGHT = 1
local physProperties = PhysicalProperties.new(DENSITY, FRICTION, ELASTICITY, FRICTION_WEIGHT, ELASTICITY_WEIGHT)
part.CustomPhysicalProperties = physProperties

EnableFluidForces

Odczyt równoległy

Kiedy true i kiedy Workspace.FluidForces jest włączone, powoduje to, że silnik fizyczny oblicza siły aerodynamiczne na tym BasePart .

ExtentsCFrame

Tylko do odczytu
Bez replikacji
Odczyt równoległy

The CFrame of the physical extents of the BasePart, reprezentujący jego fizyczne centrum.

ExtentsSize

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Rzeczywisty rozmiar fizyczny BasePart zgodnie z silnikiem fizycznym, na przykład w wykrywaniu kolizji .

FrontSurface

Odczyt równoległy

Właściwość FrontSurface określa rodzaj powierzchni używanej do negatywnego kierunku Z części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.

LeftSurface

Odczyt równoległy

Właściwość LeftSurface określa rodzaj powierzchni używanej do negatywnego kierunku X części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.

LocalTransparencyModifier

Ukryte
Bez replikacji
Odczyt równoległy

Właściwość LocalTransparencyModifier jest mnożnikiem do Transparency, który jest widoczny tylko dla lokalnego klienta.Nie replikuje się z klienta na serwer i jest przydatny, gdy część nie powinna renderować się dla określonego klienta, tak jak gracz nie widzi części ciała swojej postaci, gdy wchodzi w tryb widoku w pierwszej osobie.

Właściwość ta modyfikuje przejrzystość lokalnej części za pomocą następującej formuły, z wynikającymi wartościami ograniczonymi między 0 i 1.

1 - (( 1 - Transparency ) × ( 1 - LocalTransparencyModifier ))


<th><code>Modyfikator przejrzystości lokalnej</code></th>
<th>Strona serwera</th>
<th>Strona klienta</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>0.5</code></td>
<td><code>0</code></td>
<td><code>0.5</code></td>
<td><code>0.5</code></td>
</tr>
<tr>
<td><code>0.5</code></td>
<td><code>0.25</code></td>
<td><code>0.5</code></td>
<td><code>0.625</code></td>
</tr>
<tr>
<td><code>0.5</code></td>
<td><code>0.5</code></td>
<td><code>0.5</code></td>
<td><code>0.75</code></td>
</tr>
<tr>
<td><code>0.5</code></td>
<td><code>0.75</code></td>
<td><code>0.5</code></td>
<td><code>0.875</code></td>
</tr>
<tr>
<td><code>0.5</code></td>
<td><code>1</code></td>
<td><code>0.5</code></td>
<td><code>1</code></td>
</tr>
</tbody>
Klasa.BasePart.Transparency|Przezroczystość

Locked

Odczyt równoległy

Właściwość określa, czy część (lub jest w niej zawarta) może zostać wybrana w Studio, klikając na nią.Właściwość ta jest najczęściej włączona na częściach w modelach środowiska, które nie są obecnie edytowane.

Przykłady kodu

This code sample uses the concept of recursion to unlock all parts that are a descendant of a model.

Recursive Unlock

-- Paste into a Script within a Model you want to unlock
local model = script.Parent
-- This function recurses through a model's heirarchy and unlocks
-- every part that it encounters.
local function recursiveUnlock(object)
if object:IsA("BasePart") then
object.Locked = false
end
-- Call the same function on the children of the object
-- The recursive process stops if an object has no children
for _, child in pairs(object:GetChildren()) do
recursiveUnlock(child)
end
end
recursiveUnlock(model)

Mass

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Mass jest właściwością tylko do odczytu, która opisuje produkt objętości i gęstości części. Jest zwracana przez funkcję GetMass().

Massless

Odczyt równoległy

Jeśli ta właściwość jest włączona, część nie przyczyni się do całkowitej masy lub bezwładności jej złożenia tak długo, jak jest spawana do innej części, która ma masę.

Jeśli część jest własną częścią korzeniową zgodnie z AssemblyRootPart, zostanie to zignorowane dla tej części i nadal będzie przyczyniać masę i bezwładność do swojej konstrukcji jak zwykła część.Części, które są bezmasowe, nie powinny nigdy stać się częścią korzenia złożenia, chyba że wszystkie inne części w złożeniu również są bezmasowe.

Może to być przydatne w przypadku rzeczy takich jak opcjonalne akcesoria na pojazdach, które nie chcesz wpływać na sterowanie samochodem lub bezramowa siatka renderowania spawana do prostszej siatki kolizyjnej.

Zobacz także Zbiórki, artykuł opisujący, czym są korzenne części i jak ich używać.

Odczyt równoległy

Właściwość Material pozwala ustawić teksturę części i domyślne właściwości fizyczne (w przypadku, gdy CustomPhysicalProperties jest niezdefiniowane).Domyślny materiał Plastic ma bardzo lekką teksturę, podczas gdy materiał SmoothPlastic nie ma wszystkotekstury.Niektóre tekstury materiałów, takie jak DiamondPlate i Granite, mają bardzo widoczne tekstury.Tekstura każdego materiału odzwierciedla światło słoneczne inaczej, szczególnie Foil .

Ustawienie tej właściwości, a następnie włączenie CustomPhysicalProperties użyje domyślnych właściwości fizycznych materiału.Na instancja, DiamondPlate jest bardzo gęstym materiałem, podczas gdy Wood jest bardzo lekki.Gęstość części decyduje o tym, czy będzie pływała w wodzie terenu.

Zmiany materiałowe Glass zmieniają zachowanie renderowania na umiarkowanych ustawieniach graficznych, stosując odrobinę odbicia (podobnie do Reflectance ) i zniekształcenia perspektywy.Efekt jest szczególnie wyraźny na częściach o kształcie kuli.Półprzezroczyste części za Glass częściami nie są widoczne.

MaterialVariant

Bez replikacji
Odczyt równoległy

System wyszukuje instancję MaterialVariant z określonym nazwiskiem MaterialVariant i wpisywaćMaterial.Jeśli pomyślnie znajdzie pasującą instancjaMaterialVariant, użyje tej instancji, aby zastąpić domyślną materiał.Domyślnym materiałem może być wbudowany materiał lub przejęcie MaterialVariant określone w MaterialService.

Orientation

Ukryte
Bez replikacji
Odczyt równoległy

Właściwość Orientation opisuje rotację części w stopniach wokół osi X , Y i Z za pomocą Vector3 .Rotacje są stosowane w Y > X > Z kolejności.Różni się to od właściwych kątów Euler i zamiast tego są to kąty Tait-Bryan, które opisują nachylenie , nachylenie i obrót .

Warto też zauważyć, w jaki sposób ta właściwość różni się od konstruktora CFrame.Angles(), który stosuje rotacje w innym porządku ( Z > Y > X ).Aby lepiej kontrolować obrót części, zaleca się ustawienie CFrame zamiast tego.

Podczas ustawiania tej właściwości każdy Welds lub Motor6Ds połączony z tą częścią będzie miał zaktualizowaną właściwość C0 lub C1, aby umożliwić części poruszanie się względem innych części, do których jest połączony.WeldConstraints również zostanie tymczasowo wyłączony i ponownie włączony podczas przeprowadzki.

Przykłady kodu

Ten przykład kodu obraca część nieprzerwanie na osi Y.

Spinner części

local part = script.Parent
local INCREMENT = 360 / 20
-- Obracać część nieprzerwanie
while true do
for degrees = 0, 360, INCREMENT do
-- Ustaw tylko rotację osi Y
part.Rotation = Vector3.new(0, degrees, 0)
-- Lepszym sposobem na to byłoby ustawienie CFrame
--part.CFrame = CFrame.new(part.Position) * CFrame.Angles(0, matematyczny rad(stopni), 0)
task.wait()
end
end

PivotOffset

Odczyt równoległy

Właściwość ta określa przesunięcie osi części od jej , które jest równe pomnożonemu przez .

To jest wygodne do ustawienia pivotu do lokalizacji w przestrzeni lokalnej , ale ustawienie pivotu części do lokalizacji w przestrzeni świata można wykonać w następujący sposób:


local Workspace = game:GetService("Workspace")
local part = Workspace.BluePart
local desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)
part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)

Przykłady kodu

This code sample shows a custom function for resetting the pivot of a model back to the center of that model's bounding box.

Reset Pivot

local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)

Ten przykład kodu tworzy zegar na pochodzeniu z minutą, sekundą i godziną ręką, a następnie sprawia, że ​​bije, wyświetlając lokalną godzinę.

Ręce zegara

local function createHand(length, width, yOffset)
local part = Instance.new("Part")
part.Size = Vector3.new(width, 0.1, length)
part.Material = Enum.Material.Neon
part.PivotOffset = CFrame.new(0, -(yOffset + 0.1), length / 2)
part.Anchored = true
part.Parent = workspace
return part
end
local function positionHand(hand, fraction)
hand:PivotTo(CFrame.fromEulerAnglesXYZ(0, -fraction * 2 * math.pi, 0))
end
-- Utwórz dzwonek
for i = 0, 11 do
local dialPart = Instance.new("Part")
dialPart.Size = Vector3.new(0.2, 0.2, 1)
dialPart.TopSurface = Enum.SurfaceType.Smooth
if i == 0 then
dialPart.Size = Vector3.new(0.2, 0.2, 2)
dialPart.Color = Color3.new(1, 0, 0)
end
dialPart.PivotOffset = CFrame.new(0, -0.1, 10.5)
dialPart.Anchored = true
dialPart:PivotTo(CFrame.fromEulerAnglesXYZ(0, (i / 12) * 2 * math.pi, 0))
dialPart.Parent = workspace
end
-- Twórz ręce
local hourHand = createHand(7, 1, 0)
local minuteHand = createHand(10, 0.6, 0.1)
local secondHand = createHand(11, 0.2, 0.2)
-- Zegar uruchomiony
while true do
local components = os.date("*t")
positionHand(hourHand, (components.hour + components.min / 60) / 12)
positionHand(minuteHand, (components.min + components.sec / 60) / 60)
positionHand(secondHand, components.sec / 60)
task.wait()
end

Position

Ukryte
Bez replikacji
Odczyt równoległy

Właściwość Position opisuje koordynaty części za pomocą Vector3.Odbija pozycję części CFrame, jednak można ją również ustawiać.

Podczas ustawiania tej właściwości każdy Welds lub Motor6Ds połączony z tą częścią będzie miał zaktualizowaną właściwość C0 lub C1, aby umożliwić części poruszanie się względem innych części, do których jest połączony.WeldConstraints również zostanie tymczasowo wyłączony i ponownie włączony podczas przeprowadzki.

ReceiveAge

Ukryte
Tylko do odczytu
Bez replikacji
Odczyt równoległy

Wskazuje czas w sekundach odkąd fizyka części została po raz ostatni zaktualizowana na lokalnym klientzie lub serwerze.Wartość ta będzie 0, gdy część nie ma fizyki (Anchored jest true).

Reflectance

Odczyt równoległy

Właściwość Reflectance określa, jak dużo część odzwierciedla niebo.Wartość 0 wskazuje, że część nie jest w wszystkoodzwierciedlająca, a wartość 1 wskazuje, że część powinna w pełni odzwierciedlać.

Odbicie nie jest wpływane przez Transparency chyba że część jest w pełni przezroczysta, w przeciwnym razie odbicie nie będzie w wszystkorenderowane.Odbicie może być ignorowane lub nie, w zależności od Material części.

ResizeIncrement

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ResizeIncrement jest właściwością tylko do odczytu, która opisuje najmniejszą zmianę rozmiaru dozwoloną przez metodę Resize().Różni się między implementacjami klasy abstrakcyjnej , na instancjama to ustawienie do , ponieważ poszczególne sekcje truss są 2×2×2 w rozmiarze.

ResizeableFaces

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ResizeableFaces używa obiektu Faces do opisania różnych twarzy, na których część może zostać zmieniona rozmiar.W przypadku większości implementacji BasePart, takich jak Part i WedgePart, właściwość ta obejmuje wszystkie twarze.Jednak ustawi swój zestaw tylko na dwie twarze, ponieważ rodzaje części muszą mieć dwie wymiary długości .

Właściwość ta jest najczęściej używana z narzędziami do budowania i manipulowania częściami i ma niewielkie zastosowanie poza tym kontekstem.Klasa Handles, która ma właściwość Handles.Faces, może być używana w połączeniu z tą właściwością, aby wyświetlać tylko uchwyty na twarzach, które można zmienić rozmiar na części.

Przykłady kodu

This code sample creates a Handles object and shows how to set the Faces property of the object. It also references ResizeableFaces of a part. Try placing this script in multiple kinds of parts to see how ResizeableFaces varies.

Resize Handles

-- Put this Script in several kinds of BasePart, like
-- Part, TrussPart, WedgePart, CornerWedgePart, etc.
local part = script.Parent
-- Create a handles object for this part
local handles = Instance.new("Handles")
handles.Adornee = part
handles.Parent = part
-- Manually specify the faces applicable for this handle
handles.Faces = Faces.new(Enum.NormalId.Top, Enum.NormalId.Front, Enum.NormalId.Left)
-- Alternatively, use the faces on which the part can be resized.
-- If part is a TrussPart with only two Size dimensions
-- of length 2, then ResizeableFaces will only have two
-- enabled faces. For other parts, all faces will be enabled.
handles.Faces = part.ResizeableFaces

RightSurface

Odczyt równoległy

Właściwość RightSurface określa rodzaj powierzchni używanej do pozytywnego kierunku X części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.

RootPriority

Odczyt równoległy

Właściwość ta jest liczbą całkowitą między -127 a 127, która ma pierwszeństwo przed wszystkimi innymi zasadami sortowaćczęści korzeniowej.Rozważając wiele części, które nie są Anchored i które dzielą tę samą wartość Massless, część z wyższą wartością RootPriority będzie miała pierwszeństwo nad tymi o niższej wartości RootPriority.

Możesz użyć tej właściwości, aby kontrolować, która część złożenia jest częścią korzeniową i utrzymywać część korzeniową stabilną, jeśli zmienia się rozmiar.

Zobacz także Zbiórki, artykuł opisujący, czym są korzenne części i jak ich używać.

Rotation

Bez replikacji
Odczyt równoległy

Rotacja części w stopniach dla trzech osi.

Podczas ustawiania tej właściwości każdy Welds lub Motor6Ds połączony z tą częścią będzie miał zaktualizowaną właściwość C0 lub C1, aby umożliwić części poruszanie się względem innych części, do których jest połączony.WeldConstraints również zostanie tymczasowo wyłączony i ponownie włączony podczas przeprowadzki.

Bez replikacji
Odczyt równoległy

Własność części Size określa jej wymiary wizualne , podczas gdy ExtentsSize reprezentuje rzeczywistą wielkość używaną przez silnik fizyczny, taką jak w wykrywaniu kolizji.Poszczególne wymiary (długość, szerokość, wysokość) mogą być tak niskie jak 0.001 i tak wysokie jak 2048.Wymiary rozmiaru poniżej będą reprezentowane wizualnie, tak jak gdyby wymiary części były .

Część Size jest używana na wiele dodatkowych sposobów:

  • Aby wpłynąć na masę, jak podano w GetMass().
  • Przez ParticleEmitter do określenia obszaru, z którego powstają cząstki.
  • Przez BlockMesh do częściowego określenia renderowanej prostokątnej pryzmy
  • Przez SpecialMesh na pewną MeshTypes w celu określenia rozmiaru renderowanej siatki.
  • Przez SurfaceLight do określenia przestrzeni do oświetlenia.

Przykłady kodu

This code sample constructs a pyramid by stacking parts that get progressively smaller. It also colors the parts so they blend between a start color and end color.

Pyramid Builder

local TOWER_BASE_SIZE = 30
local position = Vector3.new(50, 50, 50)
local hue = math.random()
local color0 = Color3.fromHSV(hue, 1, 1)
local color1 = Color3.fromHSV((hue + 0.35) % 1, 1, 1)
local model = Instance.new("Model")
model.Name = "Tower"
for i = TOWER_BASE_SIZE, 1, -2 do
local part = Instance.new("Part")
part.Size = Vector3.new(i, 2, i)
part.Position = position
part.Anchored = true
part.Parent = model
-- Tween from color0 and color1
local perc = i / TOWER_BASE_SIZE
part.Color = Color3.new(
color0.R * perc + color1.R * (1 - perc),
color0.G * perc + color1.G * (1 - perc),
color0.B * perc + color1.B * (1 - perc)
)
position = position + Vector3.new(0, part.Size.Y, 0)
end
model.Parent = workspace
Odczyt równoległy

Właściwość TopSurface określa rodzaj powierzchni używanej do pozytywnego kierunku Y części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.

Transparency

Odczyt równoległy

Właściwość Transparency kontroluje widoczność części na skali od 0 do 1, gdzie 0 jest całkowicie widoczna (nieprzezroczysta) i 1 jest całkowicie niewidoczna (nie renderowana w wszystko).

Choć w pełni przezroczyste części w wszystkonie są renderowane, częściowo przezroczyste obiekty mają pewne znaczne koszty renderowania.Posiadanie wielu przezroczystych części może wpłynąć na wykonywanie.

Gdy prześwitujące części się pokrywają, kolejność renderowania może działać nieprzewidywalnie, więc powinieneś unikać półprzezroczystych części, które się pokrywają.

Zobacz także LocalTransparencyModifier jako mnożnik do Transparency, który jest widoczny tylko dla lokalnego klienta.

Przykłady kodu

This code sample shows how a part can fade away when touched by a Humanoid then reappear a moment after to create a passable door.

Fade Door

-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()

Metody

AngularAccelerationToTorque

Parametry

angAcceleration: Vector3
Wartość domyślna: ""
angVelocity: Vector3
Wartość domyślna: "0, 0, 0"

Zwroty

ApplyAngularImpulse

()

Zastosuj natychmiastowy impuls siły kątowej do złożenia tej części, powodując, że złożenie się obraca.

Wynikowa prędkość kątowa z impulsu opiera się na montażu mass.Więc wyższy impuls jest wymagany do przemieszczania bardziej masowych zespołów.Impulsy są przydatne w przypadkach, gdy chcesz, aby siła została zastosowana natychmiast, takich jak wybuch lub kolizja.

Jeśli część jest własnością serwera , funkcja ta musi być wywołana z serwera (nie z lub z ustawionym na )).Jeśli część jest własnością klienta poprzez automatyczne własność, funkcja ta może być wywołana z dowolnego skryptu klienta lub skryptu serwera; wezwanie jej z dowolnego skryptu klienta dla części własnej serwera nie będzie miało żadnego wpływu.

Parametry

impulse: Vector3

Wektor impulsu kątowego, który ma być zastosowany do złożenia.

Wartość domyślna: ""

Zwroty

()

ApplyImpulse

()

Funkcja ta stosuje impuls siły natychmiast do złożenia tej części.

Siła jest stosowana w zgromadzeniu center of mass, więc wynikający ruch będzie tylko liniowy.

Prędkość wynikająca z impulsu opiera się na złożeniu mass .Więc wyższy impuls jest wymagany do przemieszczania bardziej masowych zespołów.Impulsy są przydatne w przypadkach, gdy chcesz, aby siła została zastosowana natychmiast, takich jak wybuch lub kolizja.

Jeśli część jest własnością serwera , funkcja ta musi być wywołana z serwera (nie z lub z ustawionym na )).Jeśli część jest własnością klienta poprzez automatyczne własność, funkcja ta może być wywołana z dowolnego skryptu klienta lub skryptu serwera; wezwanie jej z dowolnego skryptu klienta dla części własnej serwera nie będzie miało żadnego wpływu.

Parametry

impulse: Vector3

Wektor impulsu liniowego, który ma być zastosowany do złożenia.

Wartość domyślna: ""

Zwroty

()

ApplyImpulseAtPosition

()

Funkcja ta stosuje impuls siły natychmiastowej do złożenia tej części w określonej pozycji w przestrzeni świata.

Jeśli pozycja nie jest na montażu center of mass, impuls spowoduje ruch pozycyjny i obrotowy.

Prędkość wynikająca z impulsu opiera się na złożeniu mass .Więc wyższy impuls jest wymagany do przemieszczania bardziej masowych zespołów.Impulsy są przydatne w przypadkach, gdy programiści chcą zastosować siłę natychmiast, na przykład w wyniku wybuchu lub kolizji.

Jeśli część jest własnością serwera , funkcja ta musi być wywołana z serwera (nie z lub z ustawionym na )).Jeśli część jest własnością klienta poprzez automatyczne własność, funkcja ta może być wywołana z dowolnego skryptu klienta lub skryptu serwera; wezwanie jej z dowolnego skryptu klienta dla części własnej serwera nie będzie miało żadnego wpływu.

Parametry

impulse: Vector3

Wektor impulsu, który ma zostać zastosowany do złożenia.

Wartość domyślna: ""
position: Vector3

Pozycja, w przestrzeni świata, do zastosowania impulsu.

Wartość domyślna: ""

Zwroty

()

CanCollideWith

Zapis równoległy

Zwraca, czy części mogą się ze sobą zderzać, czy nie.Funkcja ta bierze pod uwagę grupy kolizyjne dwóch części.Funkcja ta wykryje błąd, jeśli określona część nie jest częścią bazową.

Parametry

part: BasePart

Wskazana część jest sprawdzana na zderzalność.

Wartość domyślna: ""

Zwroty

Czy części mogą się ze sobą zderzać.

CanSetNetworkOwnership

Funkcja CanSetNetworkOwnership sprawdza, czy możesz ustawić własność sieci części.

Wartość zwrotna funkcji sprawdza, czy możesz wezwać BasePart:SetNetworkOwner() lub BasePart:SetNetworkOwnershipAuto() bez spotkania błędu.Zwraca prawdę, jeśli możesz zmodyfikować/przeczytać własność sieci, lub zwraca fałsz i powód, dla którego nie możesz, jako ciąg znaków.


Zwroty

Czy możesz zmodyfikować lub przeczytać własność sieci i powód.

Przykłady kodu

This example checks whether or not the network ownership of the first BasePart named Part in the Workspace can be set.

Check if a Part's Network Ownership Can Be Set

local part = workspace:FindFirstChild("Part")
if part and part:IsA("BasePart") then
local canSet, errorReason = part:CanSetNetworkOwnership()
if canSet then
print(part:GetFullName() .. "'s Network Ownership can be changed!")
else
warn("Cannot change the Network Ownership of " .. part:GetFullName() .. " because: " .. errorReason)
end
end

GetClosestPointOnSurface

Parametry

position: Vector3
Wartość domyślna: ""

Zwroty

GetConnectedParts

Instances
Zapis równoległy

Zwraca tabelę części połączonych z obiektem za pomocą dowolnego rodzaju sztywnego stawu.

Jeśli recursive jest prawdą, ta funkcja zwróci wszystkie części w złożeniu ściśle połączone z BasePart.

Sztywne stawy

Kiedy połączenie łączy dwie części razem (Part0 → Part1), połączenie jest sztywne jeśli fizyka Part1 jest całkowicie zamknięta przez Part0.Dotyczy to tylko następujących wspólnych typów:

Parametry

recursive: boolean

Tabela części połączonych z obiektem za pomocą dowolnego rodzaju joint .

Wartość domyślna: false

Zwroty

Instances

GetJoints

Instances
Zapis równoległy

Zwróć wszystkie stawy lub ograniczenia, które są połączone z tą częścią.


Zwroty

Instances

Zbiór wszystkich stawów lub ograniczeń połączonych z częścią.

GetMass

Zapis równoległy

GetMass zwraca wartość właściwości read-only Mass.

Funkcja ta wyprzedza właściwość Masa. Pozostaje wspierana dla kompatybilności wstecznej; powinieneś używać właściwości Masa bezpośrednio.


Zwroty

Masa części.

Przykłady kodu

Ten przykład tworzy nową część, myPart, w przestrzeni roboczej gry, z wymiarami 4x6x4 szpilkami. Część jest również zakotwiczone.

Następnie moja masa jest ustawiona na równowartość masy nowej części. Masa części jest wydrukowana na końcu oświadczenia o drukowaniu:

Masa mojej części wynosi...

Znalezienie masy części

local myPart = Instance.new("Part")
myPart.Size = Vector3.new(4, 6, 4)
myPart.Anchored = true
myPart.Parent = workspace
local myMass = myPart:GetMass()
print("My part's mass is " .. myMass)

GetNetworkOwner

Zapis równoległy

Zwraca obecnego gracza, który jest właścicielem sieci tej części lub nil w przypadku serwera.


Zwroty

Obecny gracz, który jest właścicielem sieci tej części lub nil w przypadku serwera.

GetNetworkOwnershipAuto

Zapis równoległy

Zwraca prawdę, jeśli silnik gry automatycznie decyduje o właścicielu sieci dla tej części.


Zwroty

Czy silnik gry automatycznie decyduje o właścicielu sieci dla tej części.

GetNoCollisionConstraints

Instances

Zwroty

Instances

GetRootPart

Zapis równoległy

Zwraca podstawową część złożenia.Podczas przesuwania zespołu części za pomocą CFrame.ważne jest przeniesienie tej części bazowej (spowoduje to przesunięcie wszystkich innych części połączonych z nią odpowiednio).Więcej informacji znajduje się w artykule Zbiórki.

Funkcja ta wyprzedza właściwość AssemblyRootPart. Pozostaje wspierana ze względu na kompatybilność wsteczną, ale powinieneś używać AssemblyRootPart bezpośrednio.


Zwroty

Podstawowa część złożenia (kolekcja części połączonych ze sobą)

GetTouchingParts

Instances

Zwraca tabelę wszystkich części, które fizycznie wchodzą w interakcję z tą częścią.Jeśli sama część ma ustawione CanCollide na fałsz, to funkcja ta zwraca pusty stół, chyba że część ma obiekt TouchInterest powiązany z nią (co oznacza, że coś jest podłączone do jej wydarzenia dotkniętego).Części, które są sąsiednie, ale nie przecinają się, nie są uważane za dotykanie.Funkcja ta wyprzedza funkcję WorldRoot:GetPartsInPart(), która zapewnia większą elastyczność i unika specjalnych reguł TouchInterest opisanych powyżej.Użyj WorldRoot:GetPartsInPart() zamiast.


Zwroty

Instances

Tabela wszystkich części, które się przenikają i mogą zderzać się z tą częścią.

GetVelocityAtPosition

Zapis równoległy

Zwraca liniową prędkość montażu części w danym położeniu względem tej części.Można go użyć do identyfikacji liniowej prędkości części w złożeniu innej niż główna część.Jeśli zbiór nie ma prędkości kątowej, to prędkość liniowa zawsze będzie taka sama dla każdej pozycji.

Parametry

position: Vector3
Wartość domyślna: ""

Zwroty

IsGrounded

Zapis równoległy

Wyświetla prawdę, jeśli obiekt jest połączony z częścią, która go utrzyma w miejscu (np. częścią Anchored), w przeciwnym razie wyświetla fałsz.W złożeniu, które ma część Anchored, każda inna część jest zasilana.


Zwroty

Czy obiekt jest połączony z częścią, która utrzyma go w miejsce.

Resize

Zmienia rozmiar obiektu tak jak za pomocą narzędzia przesuwania rozmiaru Studio.

Parametry

normalId: Enum.NormalId

Strona do zmiany rozmiaru.

Wartość domyślna: ""
deltaAmount: number

Jak dużo rosnąć/kurczyć się po stronie określonej.

Wartość domyślna: ""

Zwroty

Czy część została zmieniona rozmiarem.

SetNetworkOwner

()

Ustawia danego gracza jako właściciela sieci dla tej i wszystkich połączonych części.Gdy playerInstance jest nil, serwer będzie właścicielem zamiast gracza.

Parametry

playerInstance: Player

Gracz otrzymuje własność sieci części.

Wartość domyślna: "nil"

Zwroty

()

SetNetworkOwnershipAuto

()

Pozwala silnikowi gry dynamicznie decydować, kto będzie zajmował się fizyką części (jeden z klientów lub serwer).


Zwroty

()

TorqueToAngularAcceleration

Parametry

torque: Vector3
Wartość domyślna: ""
angVelocity: Vector3
Wartość domyślna: "0, 0, 0"

Zwroty

IntersectAsync

Wynik

Tworzy nową IntersectOperation z geometrycznie pokrywającą się częścią i innymi częściami w danym obszarze.Wspierane są tylko Parts , nie Terrain lub MeshParts .Podobnie do Clone() , zwrócony obiekt nie ma ustawionego Parent .

Następujące właściwości z części wzywającej są zastosowane do wynikowego IntersectOperation :

W poniższej porównaniu obrazu IntersectAsync() jest wzywany na fioletowym bloku za pomocą tabeli zawierającej niebieski blok.Powstały IntersectOperation rozwiązuje się w kształcie geometrycznej intersekcji obu części.

Two block parts overlapping

<figcaption>Oddzielne części</figcaption>
Parts intersected into a new solid model

<figcaption>Rezultująca klasa <code>IntersectOperation</code></figcaption>

Notatki

  • Oryginalne części pozostają nienaruszone po udanej operacji przecięcia.W większości przypadków powinieneś Destroy() wszystkie oryginalne części i powiązać zwrócone IntersectOperation z tym samym miejscem, co wezwanie BasePart.
  • Domyślnie kolory twarzy z wynikowego skrzyżowania są wypożyczane z właściwości Color oryginalnych części.Aby zmienić całe skrzyżowanie na konkretny kolor, ustaw jego właściwość UsePartColor na true.
  • Jeśli operacja przecięcia doprowadzi do części z więcej niż 20 000 trójkątów, zostanie uproszczona do 20 000 trójkątów.

Parametry

parts: Instances

Obiekty biorące udział w skrzyżowaniu.

Wartość domyślna: ""
collisionfidelity: Enum.CollisionFidelity

Wartość Enum.CollisionFidelity dla wynikowego IntersectOperation.

Wartość domyślna: "Default"
renderFidelity: Enum.RenderFidelity

Wartość Enum.RenderFidelity wartości wynikowej PartOperation.

Wartość domyślna: "Automatic"

Zwroty

Wynik IntersectOperation z domyślną nazwą Zbieżność .

SubtractAsync

Wynik

Tworzy nowy UnionOperation z części, odejmując geometrię zajętą przez części w danym array.Wspierane są tylko Parts , nie Terrain lub MeshParts .Podobnie do Clone() , zwrócony obiekt nie ma ustawionego Parent .

Zauważ, że wynikowa unia nie może być pusta z powodu odliczeń. Jeśli operacja doprowadzi do całkowicie pustej geometrii, zawiedzie.

W następnym porównaniu obrazu SubtractAsync() jest wzywany na niebieskim cylindrze za pomocą tabeli zawierającej fioletowy blok.Powstały UnionOperation rozwiązuje się w formie, która pomija geometrię bloku z geometrią cylindra.

Longer block overlapping a cylinder

<figcaption>Oddzielne części</figcaption>
Block part subtracted from cylinder

<figcaption>Rezultująca klasa <code>Class.UnionOperation</code></figcaption>

Parametry

parts: Instances

Obiekty biorące udział w odliczaniu.

Wartość domyślna: ""
collisionfidelity: Enum.CollisionFidelity

Wartość Enum.CollisionFidelity dla wynikowego UnionOperation.

Wartość domyślna: "Default"
renderFidelity: Enum.RenderFidelity

Wartość Enum.RenderFidelity wartości wynikowej PartOperation.

Wartość domyślna: "Automatic"

Zwroty

Wynik UnionOperation z domyślną nazwą Unia .

Przykłady kodu

Ten przykład pokazuje, jak odejmować części od innego BasePart , aby utworzyć odrzucony UnionOperation .

BasePart:OdejmijAsync()

local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- 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

UnionAsync

Wynik

Tworzy nowy UnionOperation z części, plus geometrię zajętą przez części w danym array.Wspierane są tylko Parts , nie Terrain lub MeshParts .Podobnie do Clone() , zwrócony obiekt nie ma ustawionego Parent .

Następujące właściwości z części wzywającej są zastosowane do wynikowego UnionOperation :

W poniższej porównaniu obrazu UnionAsync() jest wzywany na niebieskim bloku za pomocą tabeli zawierającej fioletowy cylinder.Powstały UnionOperation rozwiązuje się w kształcie połączonej geometrii obu części.

Block and cylinder parts overlapping

<figcaption>Oddzielne części</figcaption>
Parts joined together into a single solid union

<figcaption>Rezultująca klasa <code>Class.UnionOperation</code></figcaption>

Notatki

  • Oryginalne części pozostają nienaruszone po udanej operacji związania.W większości przypadków powinieneś Destroy() wszystkie oryginalne części i powiązać zwrócone UnionOperation z tym samym miejscem, co wezwanie BasePart.
  • Domyślnie unia wynikowa respektuje właściwość Color każdej ze swoich części.Aby zmienić całą unię na określony kolor, ustaw jej właściwość UsePartColor na true.
  • Jeśli operacja związana z unią da wynik w postaci części z więcej niż 20 000 trójkątów, zostanie uproszczona do 20 000 trójkątów.

Parametry

parts: Instances

Obiekty biorące udział w zjednoczeniu z wzywającą częścią.

Wartość domyślna: ""
collisionfidelity: Enum.CollisionFidelity

Wartość Enum.CollisionFidelity dla wynikowego UnionOperation.

Wartość domyślna: "Default"
renderFidelity: Enum.RenderFidelity

Wartość Enum.RenderFidelity wartości wynikowej PartOperation.

Wartość domyślna: "Automatic"

Zwroty

Wynik UnionOperation z domyślną nazwą Unia .

Przykłady kodu

This example demonstrates how to combine the geometry of one BasePart with the geometry of other part(s) to form a UnionOperation.

BasePart:UnionAsync()

local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Perform union operation
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- If operation succeeds, position it at the same location and parent it to the workspace
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- Destroy original parts which remain intact after operation
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

Zdarzenia

TouchEnded

Wypala się, gdy część przestaje dotykać innej części w podobnych warunkach do tych z BasePart.Touched.

To wydarzenie działa w połączeniu z Workspace.TouchesUseCollisionGroups, aby określić, czy grupy kolizyjne są rozpoznawane do wykrycia.

Parametry

otherPart: BasePart

Przykłady kodu

This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.

Touching Parts Count

local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)

Touched

Wydarzenie dotknięte występuje, gdy część wchodzi w kontakt z inną częścią.Na instancja, jeśli częśćA uderzy w częśćB , wtedy PartA.Touched wystrzeli z częściąB i PartB.Touched wystrzeli z częściąA .

To wydarzenie wystrzeliwuje się tylko w wyniku ruchu fizycznego, więc nie wystrzeli, jeśli właściwość CFrame została zmieniona tak, że część pokrywa się z inną częścią.Oznacza to również, że co najmniej jedna z zaangażowanych części musi nie być w momencie kolizji.

To wydarzenie działa w połączeniu z Workspace.TouchesUseCollisionGroups, aby określić, czy grupy kolizyjne są rozpoznawane do wykrycia.

Parametry

otherPart: BasePart

Druga część, która weszła w kontakt z podaną częścią.


Przykłady kodu

This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.

Touching Parts Count

local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)

This code sample demonstrates how to connect the BasePart.Touched event of multiple parts in a Model to one function.

Model Touched

local model = script.Parent
local function onTouched(otherPart)
-- Ignore instances of the model coming in contact with itself
if otherPart:IsDescendantOf(model) then
return
end
print(model.Name .. " collided with " .. otherPart.Name)
end
for _, child in pairs(model:GetChildren()) do
if child:IsA("BasePart") then
child.Touched:Connect(onTouched)
end
end