BasePart

Pokaż przestarzałe

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

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

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

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

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

Podsumowanie

Właściwości

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

Metody

Metody odziedziczeni z: PVInstance

Zdarzenia

Właściwości

Anchored

Odczyt równoległy

Właściwość 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).

Part Anchored Toggle

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

AssemblyAngularVelocity

Bez replikacji
Odczyt równoległy

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

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

Ustawienie prędkości bezpośrednio może doprowadzić do nierealistycznego ruchu.Wykorzystanie Torque lub AngularVelocity ograniczenia jest preferowane, lub użyj 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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

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

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

AssemblyLinearVelocity

Bez replikacji
Odczyt równoległy

Wektor prędkości liniowej 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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

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

Części, które wszystkie mają tę samą część AssemblyRootPart, znajdują się w tej samej zbiorze.

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

AudioCanCollide

Odczyt równoległy

BackSurface

Odczyt równoległy

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.

Show All SurfaceTypes

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

Odczyt równoległy

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.

Show All SurfaceTypes

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

Bez replikacji
Odczyt równoległy

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

Part Anchored Toggle

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

CFrame

Odczyt równoległy

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.

Setting Part CFrame

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

Odczyt równoległy

CanCollide określa, czy część będzie fizycznie interakcjonować z innymi częściami.Gdy jest wyłączony, inne części mogą przejść przez 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.

Fade Door

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

CanQuery

Odczyt równoległy

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

Odczyt równoległy

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

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

Wydajność

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

CastShadow

Odczyt równoległy

Określa, czy część rzuca cień, czy nie.

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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

CollisionGroup

Bez replikacji
Odczyt równoległy

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

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

Przykłady kodu

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

PhysicsService:RegisterCollisionGroup

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

Color

Bez replikacji
Odczyt równoległy

Właściwość 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.

Character Health Body Color

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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

Odczyt równoległy

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.

Set CustomPhysicalProperties

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

EnableFluidForces

Odczyt równoległy

Gdy prawda, a gdy włączono Workspace.FluidForces, powoduje to, że silnik fizyczny oblicza siły aerodynamiczne na tym BasePart.

ExtentsCFrame

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

ExtentsSize

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

FrontSurface

Odczyt równoległy

Właściwość FrontSurface określa rodzaj powierzchni używanej do 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.

Show All SurfaceTypes

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

Odczyt równoległy

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.

Show All SurfaceTypes

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

Ukryte
Bez replikacji
Odczyt równoległy

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

Odczyt równoległy

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.

Recursive Unlock

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

Mass

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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łosność części jest określana przez jej Size i Shape, które zmieniają się w zależności od rodzaju użytej BazowejCzęści, takiej jak WedgePart.
  • Gęstość części jest określana przez jej Material lub CustomPhysicalProperties, jeśli zostanie określona.

Massless

Odczyt równoległy

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

Odczyt równoległy

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

Part Anchored Toggle

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

MaterialVariant

Bez replikacji
Odczyt równoległy

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

Ukryte
Bez replikacji
Odczyt równoległy

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.

Part Spinner

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

Odczyt równoległy

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.BluePart
local desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)
part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)

Przykłady kodu

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

Reset Pivot

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

This code sample creates a clock at the origin with a minute, second, and hour hand, and makes it tick, displaying the local time.

Clock Hands

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

Ukryte
Bez replikacji
Odczyt równoległy

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

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

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

Odczyt równoległy

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.

Touch Blink

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

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ResizeIncrement jest właściwością tylko do odczytu, która opisuje najmniejszą zmianę rozmiaru dozwoloną przez metodę 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.

Resize Handles

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

ResizeableFaces

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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.

Resize Handles

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

RightSurface

Odczyt równoległy

Właściwość RightSurface określa rodzaj powierzchni używanej do 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.

Show All SurfaceTypes

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

Odczyt równoległy

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

Bez replikacji
Odczyt równoległy

Rotacja części w stopniach dla trzech osi.

Podczas ustawiania tej właściwości każdy Welds lub Motor6Ds połączony z tą częścią będzie miał zaktualizowaną właściwość C0 lub C1, aby umożliwić 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.

Bez replikacji
Odczyt równoległy

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

Pyramid Builder

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

Właściwość TopSurface określa rodzaj powierzchni używanej do 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.

Show All SurfaceTypes

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

Odczyt równoległy

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.

Fade Door

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

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.

X-Ray Vision

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

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

Zwroty

ApplyAngularImpulse

()

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

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

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

Parametry

impulse: Vector3

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

Wartość domyślna: ""

Zwroty

()

ApplyImpulse

()

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

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

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

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

Parametry

impulse: Vector3

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

Wartość domyślna: ""

Zwroty

()

ApplyImpulseAtPosition

()

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

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

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

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

Parametry

impulse: Vector3

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

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

Pozycja, w przestrzeni świata, do zastosowania impulsu.

Wartość domyślna: ""

Zwroty

()

CanCollideWith

Zapis równoległy

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

Parametry

part: BasePart

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

Wartość domyślna: ""

Zwroty

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

CanSetNetworkOwnership

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

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


Zwroty

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

Przykłady kodu

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

Check if a Part's Network Ownership Can Be Set

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

GetClosestPointOnSurface

Parametry

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

Zwroty

GetConnectedParts

Instances
Zapis równoległy

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

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

Sztywne stawy

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

Parametry

recursive: boolean

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

Wartość domyślna: false

Zwroty

Instances

GetJoints

Instances
Zapis równoległy

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


Zwroty

Instances

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

GetMass

Zapis równoległy

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

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


Zwroty

Masa części.

Przykłady kodu

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

Finding a Part's Mass

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

GetNetworkOwner

Zapis równoległy

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


Zwroty

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

GetNetworkOwnershipAuto

Zapis równoległy

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


Zwroty

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

GetNoCollisionConstraints

Instances

Zwroty

Instances

GetRootPart

Zapis równoległy

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

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


Zwroty

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

GetTouchingParts

Instances

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


Zwroty

Instances

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

GetVelocityAtPosition

Zapis równoległy

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

Parametry

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

Zwroty

IsGrounded

Zapis równoległy

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


Zwroty

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

Resize

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

Parametry

normalId: Enum.NormalId

Strona do zmiany rozmiaru.

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

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

Wartość domyślna: ""

Zwroty

Czy część została zmieniona rozmiarem.

SetNetworkOwner

()

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

Parametry

playerInstance: Player

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

Wartość domyślna: "nil"

Zwroty

()

SetNetworkOwnershipAuto

()

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


Zwroty

()

TorqueToAngularAcceleration

Parametry

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

Zwroty

IntersectAsync

Wynik

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

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

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

Two block parts overlapping

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

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

Notatki

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

Parametry

parts: Instances

Obiekty biorące udział w skrzyżowaniu.

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

Wartość Enum.CollisionFidelity dla wynikowego IntersectOperation.

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

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

Wartość domyślna: "Automatic"

Zwroty

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

SubtractAsync

Wynik

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

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

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

Longer block overlapping a cylinder

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

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

Parametry

parts: Instances

Obiekty biorące udział w odliczaniu.

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

Wartość Enum.CollisionFidelity dla wynikowego UnionOperation.

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

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

Wartość domyślna: "Automatic"

Zwroty

Wynik UnionOperation z domyślną nazwą Unia .

Przykłady kodu

This example demonstrates how to subtract part(s) from another BasePart to form a negated UnionOperation.

BasePart:SubtractAsync()

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

Wynik

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

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

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

Block and cylinder parts overlapping

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

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

Notatki

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

Parametry

parts: Instances

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

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

Wartość Enum.CollisionFidelity dla wynikowego UnionOperation.

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

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

Wartość domyślna: "Automatic"

Zwroty

Wynik UnionOperation z domyślną nazwą Unia .

Przykłady kodu

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

BasePart:UnionAsync()

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

Zdarzenia

TouchEnded

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

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

Parametry

otherPart: BasePart

Przykłady kodu

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

Touching Parts Count

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

Touched

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

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

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

Parametry

otherPart: BasePart

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


Przykłady kodu

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

Touching Parts Count

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

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

Model Touched

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