BasePart
*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.
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:
- Kilka BaseParts może być grupowane w ramach Model i przeniesione jednocześnie za pomocą PVInstance:PivotTo() . Zobacz modele .
- A Decal zastosuje rozciągniętą teksturę obrazu do twarzy BasePart , podczas gdy A Texture zastosuje płytką teksturę obrazu do twarzy.Zobacz Tekstury i zdjęcia.
- A SurfaceGui renderuje GuiObjects na powierzchni części. Zobacz Pojemniki interfejsu użytkownika w doświadczeniu.
- Attachments można dodać do BasePart aby określić CFrames względem części.Są one często używane przez fizyczne Constraint obiekty, jak opisano w Ograniczeniach mechanicznych i Ograniczeniach przenośników.
- ParticleEmitter obiekty emitują cząstki równomiernie w objętości BasePart, do której są przypisane. Zobacz Emiterki cząstek.
- Lekkie obiekty, takie jak PointLight emitują światło z centrum BasePart jak pokazano w Źródłach światła.
- Jeśli zostanie przypisany do Tool i otrzyma nazwę Uchwyt , BasePart może być trzymany przez postacie. Zobacz Narzędzia doświadczenia wirtualnego.
Podsumowanie
Właściwości
Określa, czy część jest nieruchoma z fizyki.
Prędkość kątowa montażu części.
Centrum masy złożenia części w przestrzeni świata.
Liniowa prędkość montażu części.
Całkowita masa montażu części.
Odwołanie do części korzeniowej zbioru.
Określa, czy część będzie fizycznie interakcjonować z symulacją dźwięku, podobnie jak CastShadow.
Określa rodzaj powierzchni dla tylnej strony części.
Określa rodzaj powierzchni dla dolnej strony części.
Określa kolor części.
Określa pozycję i orientację BasePart w świecie.
Określa, czy część może zderzyć się z innymi częściami.
Określa, czy część jest rozważana podczas operacji zapytania przestrzennego.
Określa, czy zdarzenia Touched i TouchEnded wystrzelają z części.
Określa, czy część rzuca cień, czy nie.
Opisuje pozycję świata, w której znajduje się centrum masy części.
Opisuje nazwę grupakolizji części.
Określa kolor części.
Wskazuje aktualne właściwości fizyczne części.
Określa kilka fizycznych właściwości części.
Używany do włączania lub wyłączania sił aerodynamicznych na częściach i zespołach.
Rzeczywisty rozmiar fizyczny BasePart zgodnie z silnikiem fizycznym.
Określa rodzaj powierzchni dla przedniej strony części.
Określa rodzaj powierzchni dla lewej strony części.
Określa mnożnik dla BasePart.Transparency, który jest widoczny tylko dla lokalnego klienta.
Określa, czy część jest wybieralna w Studio.
Opisuje masę części, produkt jej gęstości i objętości.
Określa, czy część przyczynia się do całkowitej masy lub bezwładności jej twardego ciało.
Określa teksturę i domyślne właściwości fizyczne części.
Nazwa MaterialVariant.
Opisuje rotację części w świecie.
Określa przesunięcie osi części od jej CFrame.
Opisuje pozycję części w świecie.
Czas od ostatniej rejestrowanej aktualizacjafizyki.
Określa, ile część odzwierciedla niebo.
Opisuje najmniejszą zmianę rozmiaru dozwoloną przez metodę Resize().
Opisuje twarze, na których można zmienić rozmiar części.
Określa rodzaj powierzchni dla prawej strony części.
Główna zasada określania głównej części złożenia.
Rotacja części w stopniach dla trzech osi.
Określa wymiary części (długość, szerokość, wysokość).
Określa rodzaj powierzchni dla górnej strony części.
Określa, jak dużo część może być widoczna poprzez (odwrotność przeźroczystości części).
Metody
Zastosuj impuls kątowy do złożenia.
Zastosuj impuls do zgromadzenia na zgromadzeniu center of mass .
Zastosuj impuls do złożenia w określonej pozycji.
Zwraca, czy części mogą się ze sobą zderzać.
Sprawdza, czy możesz ustawić własność sieci części.
Zwraca tabelę części połączonych z obiektem za pomocą dowolnego rodzaju sztywnego stawu.
Zwróć wszystkie stawy lub ograniczenia, które są połączone z tą częścią.
Zwraca wartość właściwości Mass .
Zwraca obecnego gracza, który jest właścicielem sieci tej części lub nil w przypadku serwera.
Zwraca prawdę, jeśli silnik gry automatycznie decyduje o właścicielu sieci dla tej części.
Zwraca podstawową część zespołu części.
Zwraca tabelę wszystkich BasePart.CanCollide prawdziwych części, które się z tym częścią pokrywają.
Zwraca liniową prędkość montażu części w danym położeniu względem tej części.
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.
Zmienia rozmiar obiektu tak jak za pomocą narzędzia przesuwania rozmiaru Studio.
Ustawia danego gracza jako właściciela sieci dla tej i wszystkich połączonych części.
Pozwala silnikowi gry dynamicznie decydować, kto będzie zajmował się fizyką części (jeden z klientów lub serwer).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tworzy nową IntersectOperation z pokrywającej się geometrii części i innych części w danym obszarze.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tworzy nowy UnionOperation z części, odejmując geometrię zajętą przez części w danym array.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tworzy nowy UnionOperation z części, plus geometrię zajętą przez części w danym array.
Otrzymuje pivot z PVInstance .
Przekształca PVInstance wraz z całym jego potomkiem PVInstances tak, że osie zostaną teraz umieszczone w określonym CFrame .
Zdarzenia
Wypala się, gdy część przestaje dotykać innej części w wyniku ruchu fizycznego.
Wypala się, gdy część dotyka innej części w wyniku ruchu fizycznego.
Właściwości
Anchored
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).
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
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
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
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
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
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
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
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
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
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
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.
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
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.
-- 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
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
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
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
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
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().
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
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.
-- 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
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
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.
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
Kiedy true i kiedy Workspace.FluidForces jest włączone, powoduje to, że silnik fizyczny oblicza siły aerodynamiczne na tym BasePart .
ExtentsCFrame
The CFrame of the physical extents of the BasePart, reprezentujący jego fizyczne centrum.
ExtentsSize
Rzeczywisty rozmiar fizyczny BasePart zgodnie z silnikiem fizycznym, na przykład w wykrywaniu kolizji .
FrontSurface
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
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
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
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.
-- 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
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().
- Gęstość części jest określana przez jej Material lub CustomPhysicalProperties, jeśli zostanie określona.
Massless
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ć.
Material
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
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
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.
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
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.BluePartlocal 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.
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ę.
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
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
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
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
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
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.
-- 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
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
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
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.
Size
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.
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
TopSurface
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
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.
-- 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
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
Wektor impulsu kątowego, który ma być zastosowany do złożenia.
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
Wektor impulsu liniowego, który ma być zastosowany do złożenia.
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
Wektor impulsu, który ma zostać zastosowany do złożenia.
Pozycja, w przestrzeni świata, do zastosowania impulsu.
Zwroty
CanCollideWith
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
Wskazana część jest sprawdzana na zderzalność.
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.
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
GetConnectedParts
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
Zwroty
GetJoints
Zwróć wszystkie stawy lub ograniczenia, które są połączone z tą częścią.
Zwroty
Zbiór wszystkich stawów lub ograniczeń połączonych z częścią.
GetMass
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...
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
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
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
Zwroty
GetRootPart
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
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
Tabela wszystkich części, które się przenikają i mogą zderzać się z tą częścią.
GetVelocityAtPosition
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
Zwroty
IsGrounded
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
Strona do zmiany rozmiaru.
Jak dużo rosnąć/kurczyć się po stronie określonej.
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
Gracz otrzymuje własność sieci części.
Zwroty
SetNetworkOwnershipAuto
Pozwala silnikowi gry dynamicznie decydować, kto będzie zajmował się fizyką części (jeden z klientów lub serwer).
Zwroty
TorqueToAngularAcceleration
Parametry
Zwroty
IntersectAsync
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.

<figcaption>Oddzielne części</figcaption>

<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
Obiekty biorące udział w skrzyżowaniu.
Wartość Enum.CollisionFidelity dla wynikowego IntersectOperation.
Wartość Enum.RenderFidelity wartości wynikowej PartOperation.
Zwroty
Wynik IntersectOperation z domyślną nazwą Zbieżność .
SubtractAsync
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.

<figcaption>Oddzielne części</figcaption>

<figcaption>Rezultująca klasa <code>Class.UnionOperation</code></figcaption>
Parametry
Obiekty biorące udział w odliczaniu.
Wartość Enum.CollisionFidelity dla wynikowego UnionOperation.
Wartość Enum.RenderFidelity wartości wynikowej PartOperation.
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 .
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
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.

<figcaption>Oddzielne części</figcaption>

<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
Obiekty biorące udział w zjednoczeniu z wzywającą częścią.
Wartość Enum.CollisionFidelity dla wynikowego UnionOperation.
Wartość Enum.RenderFidelity wartości wynikowej PartOperation.
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.
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
Przykłady kodu
This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.
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
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.
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.
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