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 rodzaj powierzchni dla tylnej strony części (+ kierunek Z).
Określa rodzaj powierzchni dla dolnej strony części (-Y kierunek).
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 przodu części (-Z kierunek).
Określa rodzaj powierzchni dla lewej strony części (-X kierunek).
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ę Skalowanie.
Opisuje twarze, na których można zmienić rozmiar części.
Określa rodzaj powierzchni dla prawej strony części (+X kierunek).
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 części części (+ kierunek Y).
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ść zakotwiczone 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 BasePart.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 BasePart: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 tej części z montażem. Jest to szybkość zmiany pozycji montażu center of mass w szpilkach na sekundę.
Jeśli chcesz poznać prędkość w punkcie innym niż środek masy złożenia, użyj BasePart:GetVelocityAtPosition().
Ustawienie prędkości bezpośrednio może doprowadzić do nierealistycznego ruchu.Wolno używać ograniczenia VectorForce lub używać BasePart: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 parts w zgromadzeniu tej części.Części, które są Massless i nie są częścią korzenną złożenia, nie przyczynią się do masy złożenia.
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ą część AssemblyRootPart, znajdują się w tej samej zbiorze.
Aby uzyskać więcej informacji o częściach korzeniowych, zobacz Zbiórki.
AudioCanCollide
BackSurface
Właściwość BackSurface określa rodzaj powierzchni używanej do kierunku +Z części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.Jeśli ustawiono na Motor, BasePart.BackSurfaceInput określa, jak powinna zachowywać się stawka silnika.
Większość typów powierzchni renderuje teksturę na powierzchni części, jeśli BasePart.Material jest ustawiony na Plastik.Niektóre typy powierzchni - zawias, silnik i silnik krokowy - wyrenderują zamiast tego 3D ozdobę.Jeśli ta właściwość zostanie wybrana w oknie Właściwości, zostanie podświetlona w świecie gry podobnie do tej z SurfaceSelection.
Przykłady kodu
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
BottomSurface
Właściwość BottomSurface określa rodzaj powierzchni używanej do kierunku -Y części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.Jeśli ustawiono na Motor, BasePart.BottomSurfaceInput określa, jak powinna zachowywać się stawka silnika.
Większość typów powierzchni renderuje teksturę na powierzchni części, jeśli BasePart.Material jest ustawiony na Plastik.Niektóre typy powierzchni - zawias, silnik i silnik krokowy - wyrenderują zamiast tego 3D ozdobę.Jeśli ta właściwość zostanie wybrana w oknie Właściwości, zostanie podświetlona w świecie gry podobnie do tej z SurfaceSelection.
Przykłady kodu
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
BrickColor
Właściwość BrickColor określa kolor części.Jeśli część ma BasePart.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 BasePart.Color (jest to odmiana Color3 tej właściwości).Jeśli ustawiaćkolor, właściwość ta wykorzysta najbliższą BrickColor.
Inne wizualne właściwości części są określone przez BasePart.Transparency i BasePart.Reflectance.
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)
CFrame
Właściwość CFrame określa pozycję i orientację BasePart.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(), aby przesunąć cały model, tak jak przy teleportowaniu postaci gracza.
W przeciwieństwie do ustawienia BasePart.Position, ustawienie BasePart.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
This code sample demonstrates setting a part's CFrame in many different ways. It showcases how to create and compose CFrame values. It references a sibling part called "OtherPart" for demonstrating relative positioning.
local part = script.Parent:WaitForChild("Part")
local otherPart = script.Parent:WaitForChild("OtherPart")
-- Reset the part's CFrame to (0, 0, 0) with no rotation.
-- This is sometimes called the "identity" CFrame
part.CFrame = CFrame.new()
-- Set to a specific position (X, Y, Z)
part.CFrame = CFrame.new(0, 25, 10)
-- Same as above, but use a Vector3 instead
local point = Vector3.new(0, 25, 10)
part.CFrame = CFrame.new(point)
-- Set the part's CFrame to be at one point, looking at another
local lookAtPoint = Vector3.new(0, 20, 15)
part.CFrame = CFrame.lookAt(point, lookAtPoint)
-- Rotate the part's CFrame by pi/2 radians on local X axis
part.CFrame = part.CFrame * CFrame.Angles(math.pi / 2, 0, 0)
-- Rotate the part's CFrame by 45 degrees on local Y axis
part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(45), 0)
-- Rotate the part's CFrame by 180 degrees on global Z axis (note the order!)
part.CFrame = CFrame.Angles(0, 0, math.pi) * part.CFrame -- Pi radians is equal to 180 degrees
-- Composing two CFrames is done using * (the multiplication operator)
part.CFrame = CFrame.new(2, 3, 4) * CFrame.new(4, 5, 6) --> equal to CFrame.new(6, 8, 10)
-- Unlike algebraic multiplication, CFrame composition is NOT communitative: a * b is not necessarily b * a!
-- Imagine * as an ORDERED series of actions. For example, the following lines produce different CFrames:
-- 1) Slide the part 5 units on X.
-- 2) Rotate the part 45 degrees around its Y axis.
part.CFrame = CFrame.new(5, 0, 0) * CFrame.Angles(0, math.rad(45), 0)
-- 1) Rotate the part 45 degrees around its Y axis.
-- 2) Slide the part 5 units on X.
part.CFrame = CFrame.Angles(0, math.rad(45), 0) * CFrame.new(5, 0, 0)
-- There is no "CFrame division", but instead simply "doing the inverse operation".
part.CFrame = CFrame.new(4, 5, 6) * CFrame.new(4, 5, 6):Inverse() --> is equal to CFrame.new(0, 0, 0)
part.CFrame = CFrame.Angles(0, 0, math.pi) * CFrame.Angles(0, 0, math.pi):Inverse() --> equal to CFrame.Angles(0, 0, 0)
-- Position a part relative to another (in this case, put our part on top of otherPart)
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 cegłę bez przerw.Części używane do dekoracji zwykle mają wyłączoną funkcję CanCollide, ponieważ nie muszą być rozważane przez silnik fizyczny.
Jeśli część nie jest BasePart.Anchored i ma wyłączoną funkcję CanCollide, może wypaść z świata, aby ostatecznie zostać zniszczona przez Workspace.FallenPartsDestroyHeight .
Gdy CanCollide jest wyłączone, części mogą nadal wystrzelić wydarzenie BasePart.Touched (jak również pozostałe części, które je dotykają).Możesz to wyłączyć za pomocą BasePart.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
CanQuery określa, czy część jest rozważana podczas operacji zapytania przestrzennego, takich jak GetPartBoundsInBox lub Raycast.CanCollide musi być również wyłączone przy wyłączaniu CanQuery.Funkcje te nigdy nie będą zawierać części, których CanQuery i CanCollide jest fałszywy.
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.
Zauważ, że ta funkcja jest nie zaprojektowana do poprawy wydajności.Powinien być wyłączony tylko na częściach, na których chcesz ukryć cienie rzucane przez część.Wyłączenie tej właściwości dla danego części może spowodować wizualne artefakty na cieniach rzucanych na tę część.
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 jest zawsze (0,0,0).Może się to różnić dla WedgePart lub MeshPart jednak.
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ść Kolor określa kolor części.Jeśli część ma BasePart.Material, to również określa kolor używany przy renderowaniu tekstury materiału.Jeśli ta właściwość jest ustawiać, BasePart.BrickColor użyje najbliższej BrickColor do wartości Color3.
Inne wizualne właściwości części są określone przez BasePart.Transparency i BasePart.Reflectance.
Przykłady kodu
This code sample colors a player's entire character based on how much health they have. It generates a color based on their max health, then sets the color properties of objects within their character, removing any extra objects.
-- Paste into a Script within StarterCharacterScripts
-- Then play the game, and fiddle with your character's health
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
-- Create a color by tweening based on the percentage of your health
-- The color goes from colorHealthy (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 na obecne 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 priorytetowo traktuje 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
Właściwości fizyczne niestandardowe pozwalają dostosować różne fizyczne aspekty Part , takie jak jego 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 BasePart.Material części.Strona dla Enum.Material zawiera listę różnych materiałów 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
Gdy prawda, a gdy włączono Workspace.FluidForces, 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 kierunku -Z części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.Jeśli ustawiono na Motor, BasePart.FrontSurfaceInput określa, jak powinna zachowywać się stawka silnika.
Większość typów powierzchni renderuje teksturę na powierzchni części, jeśli BasePart.Material jest ustawiony na Plastik.Niektóre typy powierzchni, w tym zawias, silnik i silnik skoku, renderują zamiast tego 3D ozdobę.Jeśli ta właściwość zostanie wybrana w oknie Właściwości, zostanie podświetlona w świecie gry podobnie do tej z SurfaceSelection.
Przykłady kodu
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
LeftSurface
Właściwość LeftSurface określa rodzaj powierzchni używanej do kierunku -X części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.Jeśli ustawiono na Motor, BasePart.LeftSurfaceInput określa, jak powinna zachowywać się stawka silnika.
Większość typów powierzchni renderuje teksturę na powierzchni części, jeśli BasePart.Material jest ustawiony na Plastik.Niektóre typy powierzchni, w tym zawias, silnik i silnik skoku, renderują zamiast tego 3D ozdobę.Jeśli ta właściwość zostanie wybrana w oknie Właściwości, zostanie podświetlona w świecie gry podobnie do tej z SurfaceSelection.
Przykłady kodu
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
LocalTransparencyModifier
Właściwość LocalTransparencyModifier jest mnożnikiem do BasePart.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 a 1.
clientTransparency = 1 - ((1 - part.Transparency) * (1 - part.LocalTransparencyModifier))
<th>Modyfikator przejrzystości lokalnej</th><th>Przezroczystość po stronie serwera</th><th>Przezroczystość po stronie klienta</th></tr></thead><tbody><tr><td>0.5</td><td>0</td><td>0.5</td><td>0.5</td></tr><tr><td>0.5</td><td>0.25</td><td>0.5</td><td>0.625</td></tr><tr><td>0.5</td><td>0.5</td><td>0.5</td><td>0.75</td></tr><tr><td>0.5</td><td>0.75</td><td>0.5</td><td>0.875</td></tr><tr><td>0.5</td><td>1</td><td>0.5</td><td>1</td></tr></tbody>
Przezroczystość |
---|
Locked
Właściwość Zablokowane określa, czy właściwość (lub właściwość jest zawarta w niej) może zostać wybrana w Roblox 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.Roblox Studio posiada narzędzie Blokada/Odblokuj wszystko, które może przełączyć stan Zablokowany dla każdej części potomnej w modelu naraz.
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
Masa 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, BasePart nie przyczyni się do całkowitej masy lub bezwładności jego złożenia tak długo, jak jest spawany 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ść materiał pozwala budowniczemu ustawić teksturę części i domyślne właściwości fizyczne (w przypadku, gdy BasePart.CustomPhysicalProperties nie jest ustawiony).Domyślny materiał z tworzywa sztucznego ma bardzo lekką teksturę, a materiał SmoothPlastic nie ma w 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 Folia.
Ustawienie tej właściwości, a następnie włączenie BasePart.CustomPhysicalProperties użyje domyślnych właściwości fizycznych materiału.Na instancja, DiamondPlate jest bardzo gęstym materiałem, podczas gdy Drewno jest bardzo lekkie.Gęstość części decyduje o tym, czy będzie pływała w wodzie terenu.
Materiał szkła zmienia zachowanie renderowania na umiarkowanych ustawieniach graficznych.Stosuje trochę odbicia (podobne do BasePart.Reflectance ) i zniekształcenia perspektywy.Efekt jest szczególnie wyraźny na kulistych częściach (ustaw BasePart.Shape na Piłkę).Półprzezroczyste obiekty i szklane części za szkłem nie są widoczne.
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)
MaterialVariant
System wyszukuje instancję MaterialVariant z określonym nazwą materiału Variant i BasePart.Material wpisywać.Jeśli pomyślnie znajdzie odpowiednią instancjaMaterialVariant, używa tej instancji MaterialVariant do zastąpienia domyślnego materiału.Domyślnym materiałem może być materiał wbudowany lub przejęty materiał wskazany w MaterialService.
Orientation
Właściwość orientacji opisuje rotację części w stopniach wokół osi X, Y i Z za pomocą Vector3.Rotacje są stosowane w kolejności Y → X → Z.Różni się to od właściwych kątów Eulera i zamiast tego jest to kąty Tait-Bryana, które opisują gięcie, 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 BasePart.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ć ruch części w stosunku do każdej innej części, do której jest połączony.
Ograniczenia spawania również zostaną tymczasowo wyłączone i ponownie włączone podczas przesuwania.
Przykłady kodu
This code sample rotates a part continually on the Y axis.
local part = script.Parent
local INCREMENT = 360 / 20
-- Rotate the part continually
while true do
for degrees = 0, 360, INCREMENT do
-- Set only the Y axis rotation
part.Rotation = Vector3.new(0, degrees, 0)
-- A better way to do this would be setting CFrame
--part.CFrame = CFrame.new(part.Position) * CFrame.Angles(0, math.rad(degrees), 0)
task.wait()
end
end
PivotOffset
Ta właściwość określa przesunięcie osi części od jej , które jest takie samo jak .
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)
This code sample creates a clock at the origin with a minute, second, and hour hand, and makes it tick, displaying the local time.
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
-- Create dial
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
-- Create hands
local hourHand = createHand(7, 1, 0)
local minuteHand = createHand(10, 0.6, 0.1)
local secondHand = createHand(11, 0.2, 0.2)
-- Run clock
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ść Pozycja opisuje koordynaty part za pomocą Vector3 .Odbija pozycję części BasePart.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ć ruch części w stosunku do każdej innej części, do której jest połączony.
Ograniczenia spawania również zostaną tymczasowo wyłączone i ponownie włączone podczas przesuwania.
ReceiveAge
Wyświetla czas w sekundach odkąd fizyka części została po raz ostatni zaktualizowana na lokalnym klientze (lub serwerze).Zwraca 0, gdy część nie ma fizyki (zakotwiczone)
Reflectance
Właściwość Odbicie określa, jak dużo part 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 BasePart.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 BasePart.Material części.
Przykłady kodu
This code sample causes a part to blink its Reflectance and a PointLight every time it is touched. It uses a pattern that prevents multiple concurrent function calls from fighting with each other.
local part = script.Parent
local pointLight = Instance.new("PointLight")
pointLight.Brightness = 0
pointLight.Range = 12
pointLight.Parent = part
local touchNo = 0
local function blink()
-- Advance touchNo to tell other blink() calls to stop early
touchNo = touchNo + 1
-- Save touchNo locally so we can tell when it changes globally
local myTouchNo = touchNo
for i = 1, 0, -0.1 do
-- Stop early if another blink started
if touchNo ~= myTouchNo then
break
end
-- Update the blink animation
part.Reflectance = i
pointLight.Brightness = i * 2
task.wait(0.05)
end
end
part.Touched:Connect(blink)
ResizeIncrement
Właściwość ResizeIncrement jest właściwością tylko do odczytu, która opisuje najmniejszą zmianę rozmiaru dozwoloną przez metodę BasePart:Resize().Różni się w zależności od implementacji klasy abstrakcyjnej BasePart.Na instancja, Part ma to ustawienie na 1, a TrussPart ma to ustawienie na 2 (ponieważ poszczególne sekcje kratownicy są wielkości 2x2x2).
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
ResizeableFaces
Właściwość ResizableFaces (z e , nie ResizableFaces) opisuje korzystanie z obiektu Faces z różnymi twarzami, na których można zmienić rozmiar części.W przypadku większości implementacji BasePart , takich jak Part i WedgePart , właściwość ta obejmuje wszystkie twarze.Jednak ustawi swoją listę Dostosowywalnych Twarzy tylko na dwie twarze, ponieważ rodzaje części muszą mieć dwie wymiary długości 2.Właściwość ta jest najczęściej używana z narzędziami używanymi 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 kierunku +X części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.Jeśli ustawiono na Motor, BasePart.RightSurfaceInput określa, jak powinna zachowywać się stawka silnika.
Większość typów powierzchni renderuje teksturę na powierzchni części, jeśli BasePart.Material jest ustawiony na Plastik.Niektóre typy powierzchni, w tym zawias, silnik i silnik skoku, wyrenderują zamiast tego 3D ozdobę.Jeśli ta właściwość zostanie wybrana w oknie Właściwości, zostanie podświetlona w świecie gry podobnie do tej z SurfaceSelection.
Przykłady kodu
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
RootPriority
Właściwość ta jest całkowitą liczbą od -127 do 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ą priorytetem korzenia będzie miała pierwszeństwo nad tymi o niższej priorytecie korzenia .
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ć ruch części w stosunku do każdej innej części, do której jest połączony.
Ograniczenia spawania również zostaną tymczasowo wyłączone i ponownie włączone podczas przesuwania.
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 0.05 będą reprezentowane wizualnie tak, jakby wymiary części wynosiły 0.05.
Rozmiar części określa jej masę, która jest podana przez BasePart:GetMass() . Część Size jest używana przez różne inne obiekty:
- ParticleEmitter do określenia obszaru, z którego powstają cząstki.
- BlockMesh do częściowego określenia renderowanej prostokątnej pryzmy
- SpecialMesh dla pewnego MeshTypes , aby określić rozmiar renderowanej siatki.
- 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 kierunku +Y części.Gdy twarze dwóch części są umieszczone obok siebie, mogą one stworzyć między nimi wspólność.Jeśli ustawiono na Motor, BasePart.TopSurfaceInput określa, jak powinna zachowywać się stawka silnika.
Większość typów powierzchni renderuje teksturę na powierzchni części, jeśli BasePart.Material jest ustawiony na Plastik.Niektóre typy powierzchni - zawias, silnik i silnik krokowy - wyrenderują zamiast tego 3D ozdobę.Jeśli ta właściwość zostanie wybrana w oknie Właściwości, zostanie podświetlona w świecie gry podobnie do tej z SurfaceSelection.
Przykłady kodu
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
Transparency
Właściwość przejrzystości kontroluje widoczność części na skali od 0 do 1, gdzie 0 jest całkowicie widoczne (nieprzezroczyste), a wartość 1 jest całkowicie niewidoczna (nie jest renderowana w wszystko).
BasePart.Reflectance może zmniejszyć ogólną przejrzystość cegły, jeśli ustawiono ją na wartość zbliżoną do 1.
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 spowolnić wykonywaniegra.
Gdy przeświecające części się pokrywają, kolejność renderowania może działać nieprzewidywalnie - spróbuj unikać pokrywania półprzezroczystych części, aby tego uniknąć.
The BasePart.LocalTransparencyModifier jest mnożnikiem przejrzystości, 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()
This code sample gives the local client X-ray vision using LocalTransparencyModifier. It allows the player to see through all parts in the Workspace, which are found using recursion.
local function makeXRayPart(part)
-- LocalTransparencyModifier will make parts see-through but only for the local
-- client, and it won't replicate to the server
part.LocalTransparencyModifier = 0.5
end
-- This function uses recursion to search for parts in the game
local function recurseForParts(object)
if object:IsA("BasePart") then
makeXRayPart(object)
end
-- Stop if this object has a Humanoid - we don't want to see-through players!
if object:FindFirstChildOfClass("Humanoid") then
return
end
-- Check the object's children for more parts
for _, child in pairs(object:GetChildren()) do
recurseForParts(child)
end
end
recurseForParts(workspace)
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
This example creates a new part, myPart, in the game's Workspace, with dimensions 4x6x4 studs. The part is also anchored.
Then, myMass is set to equal the mass of the new part. The mass of the part is printed at the end of the print statement:
My part's mass is ...
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
This example demonstrates how to subtract part(s) from another BasePart to form a negated UnionOperation.
local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Perform subtract operation
local success, newSubtract = pcall(function()
return mainPart:SubtractAsync(otherParts)
end)
-- If operation succeeds, position it at the same location and parent it to the workspace
if success and newSubtract then
newSubtract.Position = mainPart.Position
newSubtract.Parent = Workspace
end
-- Destroy original parts which remain intact after operation
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