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 klasą bazową
Dla informacji o tym, jak BaseParts są zespożone w twardych ciałach symulowanych, zobacz Zbiórki.
Istnieje wiele różnych obiektów, które wchodzą w interakcję z BasePart (poza Terrain )
- Kilka BaseParts może być grupowane w Model i przesuwane jednocześnie używając PVInstance:PivotTo(). Zobacz 2> Modele2>.
- Attachments można dodać do BasePart , aby określić CFrames w odniesieniu do części. Te są często używane przez fizyczne 0> Class.Limit0> obiekty, jak wymienion
- ParticleEmitter obiekty emitują cząsteczki równomiernie w objętości BasePart do której są one podłączone. Zobacz Emiter cząsteczek .
- Przedmioty światła, takie jak PointLight, promieniują światłem z centrum BasePart jak pokazano w Źródłach światła.
Podsumowanie
Właściwości
Określa, czy część jest nieprzenośna z punktu widzenia fizyki.
Prędkość kątowa zgromadzenia części.
Centrum masy części w przestrzeni świata.
Liniowa prędkość montażu części.
Całkowita masa zgromadzenia części.
Odniesienie do korzenia części zestawu.
Określa rodzaj powierzchni dla oblicza tylnego części (+Z kierunek).
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 uderzyć z innymi częściami.
Określa, czy część jest uważana podczas operacji zapytania przestrzeni.
Określa, czy Touched i TouchEnded wydarzenia w części.
Określa, czy część tworzy cień lub nie.
Opisuje pozycję świata, w której znajduje się centrum masy części.
Opisuje nazwę grupakolizji części.
Określa kolor części.
Wskazuje bieżące właściwości fizyczne części.
Określa kilka fizycznych właściwości części.
Używany do włączenia lub wyłączenia sił aerodynamicznych na częściach i zestawach.
Datatype.CFrame fizycznych składek BasePart .
Fizyczna wielkość BasePart wg fizyki.
Określa rodzaj powierzchni dla Strony Frontowej 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ęść może być wybrana w Studio.
Opisuje masę części, produkt jego gęstości i objętości.
Określa, czy część przyczynia się do całkowitej masy lub inercji jego elastycznego ciało.
Określa teksturę i domyślną fizyczną właściwość części.
Nazwa MaterialVariant .
Opisuje rotację części w świecie.
Określa przesunięcie pivot części z jej CFrame .
Opisuje pozycję części w świecie.
Czas od ostatniego zapisu aktualizacja.
Określa, jak wiele części odzwierciedla niebo.
Opisuje najmniejszą zmianę w rozmiarze możliwą za pomocą metody zmiany rozmiarów.
Opisuje oblicza, na których można zmniejszyć część.
Określa rodzaj powierzchni dla prawego oblicza części (+X kierunek).
Główna zasada określania głównej części zestawienia.
Rotacja części w stopniach dla trzech osi.
Określa wielkość części (długość, szerokość, wysokość).
Określa rodzaj powierzchni dla oblicza góry części (+Y kierunek).
Określa, ile części można zobaczyć poprzez (przeciwieństwo nieprzezroczystości części).
Metody
Zastosuj impuls kątowy do zgromadzenia.
Zastosuj impuls do zgromadzenia w centrum zgromadzenia.
Zastosuj impuls do zgromadzenia na określonym położeniu.
Zwraca, czy części mogą uderzać ze sobą.
Sprawdza, czy możesz ustawić własność sieci części.
Zwraca tabelę części połączonych z obiektem za pomocą dowolnego rodzaju łączników elastycznych.
Zwróć wszystkie Współczynniki lub ograniczenia, które są powiązane z tym elementem.
Zwraca wartość właściwości Mass.
Zwraca bieżącego gracza, który jest właścicielem sieci w tej części, lub zero w przypadku serwera.
Wróщает prawdę, jeśli silnik gry automatycznie zdecyduje o właścicielu sieci dla tej części.
Zwraca podstawową część zestawu części.
Wywraca tabelę wszystkich BasePart.CanCollide prawdziwych części, które się z tym elementem łączą.
Zwraca liniową prędkość zgromadzenia części w danej pozycji w stosunku do tej części.
Wyświetla prawdę, jeśli obiekt jest połączony z częścią, która go utrzyma w miejscu (na przykład część Anchored), w innym wypadku wyświetla fałszywie.
Zmienia rozmiar obiektu, tak jak używając narzędzia Studio do zmiany rozmiarów.
Ustawia podanego gracza jako właściciela sieci dla tego i wszystkich połączonych części.
Pozwala silnikowi gry dynamicznie zdecydować, kto będzie odpowiadał za fizykę części (jednego z klientów lub serwera).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tworzy nowy IntersectOperation z geometrią wstępującą z części i innych części w podanym maszynie.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Utworzy nowy UnionOperation z części, odejmując geometrię zajętą przez części w podanym maszynie.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tworzy nowy UnionOperation z części, plus geometrię zajętą przez części w podanym массиве.
Zdobadza pivot Class.PVInstance .
Transformuje PVInstance wraz z wszystkimi jego potomnymi PVInstances, tak aby pivot teraz znajdował się w CFrame .
Zdarzenia
Wystrzela, gdy część przestaje dotykać innej części w wyniku ruchu fizycznego.
Występuje po dotknięciu części przez inną część w wyniku ruchu fizycznego.
Właściwości
Anchored
Właściwość Zakotwiczone określa, czy część będzie nieporuszalna fizycznie. Gdy jest włączona, część nigdy nie będzie się zmieniać pozycji z powodu grawitacji, innych kolizji części, przenikania się części lub jakiejkolwiek innej przyczyny fizycznej. W wynikdwa zakotwiczone części nigdy nie będą wysywały wydarzenia
Zakotwiczone część może nadal być przesunięte poprzez zmianę jej CFrame lub Position, a nadal może mieć nie zero AssemblyLinearVelocity i 1> Class.BasePart.AssemblyAngularVelocity|AssemblyAngularVelocity1> .
W końcu, jeśli niezakorowana część zostanie połączona z zakorowaną częścią poprzez obiekt, taką jak Weld, to również będzie działać zakorowana. Jeśli taka łączność pęka, część może być również dotknięta przez fizykę ponownie. Zobacz Zestawy dla więcej szczegółów.
Właścicielstwo sieci nie może być ustawione na zaciskach. Jeśli status zacisków zmienia się na serwerze, właścicielstwo sieci tej części będzie zmienione.
Przykłady kodu
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 tego elementu. Jest to szybkość zmiany kierunku w stopniach na sekundę.
Prędkość kątowa jest taka sama w każdym punkcie zgromadzenia.
Ustawienie prędkości bezpośrednio może prowadzić do nierozsądnego ruchu. Używanie Torque lub AngularVelocity ograniczenia jest preferowane, lub użyj BasePart:ApplyAngularImpulse(), jeśli chcesz natychmiastowej zmiany prędkości.
Jeśli część jest posiadana przez serwer, ta właściwość musi być zmieniona z serwera Class.Script (nie z serwera Class.
AssemblyCenterOfMass
Pozycja obliczona za pomocą mass i position wszystkich części w zestawie.
Jeśli część jest związana, to centrum masy tej części będzie centrum masy montażu, a montaż będzie mieć nieskończoną masę.
Znajomość centrum masy może pomóc zachować stabilność zgromadzenia. Siła stosowana do centrum masy nie będzie powodować kątowej akceleracji, tylko liniowej. Konstrukcja z niskim centrum masy będzie mieć lepszy czas trzymania się pod wpływem grawitacji.
AssemblyLinearVelocity
Wektor prędkości liniowej tej części. Jest to szybkość zmiany położenia center of mass w sekundach na sekundę.
Jeśli chcesz znać prędkość w jakiejkolwiek innej lokalizacji niż centrum masy zbioru, użyj BasePart:GetVelocityAtPosition() .
Ustawienie prędkości bezpośrednio może prowadzić do nierozsądnego ruchu. Używanie ograniczenia VectorForce jest preferowane, lub użyj BasePart:ApplyImpulse(), jeśli chcesz natychmiastowej zmiany prędkości.
Jeśli część jest posiadana przez serwer, ta właściwość musi być zmieniona z serwera Class.Script (nie z serwera Class.
AssemblyMass
Suma masy wszystkich parts w tym montażu. Części, które są Class.BasePart.Massless|nie są częścią korzenia montażu, nie będą przyczyniać się do masy montażu.
Jeśli część jest związana, masa konstrukcji jest uważana za nieskończoność. Ograniczenia i inne interakcje fizyczne między niezwiązanymi z dużą różnicą w masie konstrukcji mogą powodować instabilność.
AssemblyRootPart
To właściwość wskazuje na BasePart automatycznie wybraną do reprezentowania korzenia zbioru. Jest to ta sama część, która jest zwracana, gdy rozwozywani nazywają GetRootPart() .
Część korzeni można zmienić poprzez zmianę RootPriority części w zestawie.
Części, które wszystkie dzielą się tą samą częścią korzenia, są w tej samej konstrukcji.
For more information on root parts, see Zestawy .
BackSurface
Właściwość BackSurface określa rodzaj powierzchni używanej dla +Z kierunku części. Gdy dwa oblicza części są umieszczone obok siebie, mogą stworzyć współlokalizację między nimi. Jeśli ustawiony na Motor, BasePart.BackSurfaceInput określa, jak powinien zachować się współlokalizacja między nimi.
Większość powierzchni typu renderuje teksturę na twarzy części, jeśli BasePart.Material ustawiony jest na Plastic. Niektóre powierzchnie typu - skręt, silnik i krokodyl - renderują zamiast tego 3D adornment. Jeśli ta właściwość jest zaznaczona w oknie Właściwości, zostanie ona podświetlona w grze podobnie jak w przypad
Przykłady kodu
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 dla kierunku -Y części. Gdy dwa oblicza części są umieszczone obok siebie, mogą stworzyć współlokalizację między nimi. Jeśli ustawiony na Motor, BasePart.BottomSurfaceInput określa, jak powinien zachować się współlokalizacja między nimi.
Większość powierzchni typu renderuje teksturę na twarzy części, jeśli BasePart.Material ustawiony jest na Plastic. Niektóre powierzchnie typu - skręt, silnik i krokodyl - renderują zamiast tego 3D adornment. Jeśli ta właściwość jest zaznaczona w oknie Właściwości, zostanie ona podświetlona w grze podobnie jak w przypad
Przykłady kodu
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żyty do renderowania tekstury materiału. Dla większej kontroli nad kolorem właściwość BasePart.Color może być używana (jest to wariant koloru Color3). Jeśli ustawiać, kolor ten zostanie użyty Class
Inne właściwości wizualne części są określone przez BasePart.Transparency i BasePart.Reflectance.
Przykłady kodu
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 zarówno pozycję i orientację BasePart w świecie. Działa jako przypadkowa lokalizacja odniesienia na geometrii, ale ExtentsCFrame reprezentuje rzeczywisty 1> Datatype.CFrame1> jego centrum fizycznego.
Podczas ustawiania CFrame na części, inne połączone części są również przesuwane w stosunku do części, ale zaleca się używanie PVInstance:PivotTo() do przesunięcia całego modelu, takiego jak przy teleportacji postaci gracza.
W przeciwieństwie do ustawienia BasePart.Position , ustawienie BasePart.CFrame zawsze przeniesie część do dokładnie podanego CFrame ; in other words: 1> no restart checking is done1> i rozwiązacz fizyczny spróbuje rozwiązać dowolne zakłó
Do śledzenia pozycji w stosunku do części CFrame , an Attachment może być przydatny.
Przykłady kodu
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ęść fizycznie wejdzie w interakcję z innymi częściami. Gdy jest wyłączona, inne części mogą przejść przez cegłę bez przerwy. Części używane do dekoracji zwykle mają CanCollide wyłączoną, ponieważ nie są one przez silnik fizyki rozważane.
Jeśli część nie jest BasePart.Anchored i ma wyłączoną opcję Kollizja z Workspace.FallenPartsDestroyHeight , może spaść z świata, aby w końcu zostać zniszczona przez Class.Workspace.FallenPartsDestroyHeight.
Gdy CanCollide jest wyłączony, części nadal mogą wystrzelić wydarzenie BasePart.Touched (jako również inne części je dotykające). Możesz to wyłączyć za pomocą BasePart.CanTouch .
For more information on collisions, see Kolizje .
Przykłady kodu
-- 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 uważana podczas operacji zapytania przestrzeni, takich jak GetPartBoundsInBox lub Raycast. CanCollide musi być również wyłączone, gdy wyłączone jest 2>CanQuery2>, aby te funkcje
Poza tą właściwością możliwe jest również wykluczenie części, które są potomstwami danej listy części używając obiektu OverlapParams lub RaycastParams podczas wysuwania funkcji zapytania przestrzeni.
CanTouch
Właściwość określa, czy Class.BasePart.Touched|T
Uwaga, że ta logika kolizji może być ustawiona tak, aby przestrzegać grup kolizji poprzez właściwość Workspace.TouchesUseCollisionGroups. Jeśli true, części w grupach niekolizujących będą ignorować zarówno kolizje 2>i2> dotykowe, co sprawia, że ta właściwość jest bez znaczenia.
Wydajność
Istnieje niewielki wzrost wydajności na części, które mają zarówno CanTouch i CanCollide ustawione na false, ponieważ te części nigdy nie będą musiały
CastShadow
Określa, czy część tworzy cień lub nie.
Uwaga, że ta funkcja nie jest zaprojektowana do poprawy wydajności. Powinna być wyłączona tylko na częściach, w których chcesz ukryć cienie, które castuje część. Wyłączenie tej właściwości dla danej części może powodować artystyczne efekty na cieniach castowanych na tej częci.
CenterOfMass
Właściwość CenterOfMass opisuje lokalną pozycję centrum maszyny. Jeśli jest to pojedyncza zbiór części, jest to AssemblyCenterOfMass przekształcony z przestrzeni świata do lokalnej. Na prostym AssemblyCenterOfMass , centrum maszyny jest zawsze (0,0,
CollisionGroup
Właściwość CollisionGroup opisuje nazwę grupy kolizji części (maksymalnie 100 znaków). Części zaczynają się od domyślnej grupy, która ma nazwę "Default" . Ta wartość nie może być pusta.
Chociaż sama ta właściwość nie jest replikowana, silnik wewnętrznie replikuje wartość poprzez inną prywatną właściwość, aby rozwiązać problemy kompatności z przeszłością.
Przykłady kodu
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żyty podczas renderowania tekstury materiału. Jeśli właściwość ta jest ustawiać, BasePart.BrickColor będzie używać najbliższego koloru cegły do wartości Color3.
Inne właściwości wizualne części są określone przez BasePart.Transparency i BasePart.Reflectance.
Przykłady kodu
-- 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 bieżące fizyczne właściwości części. Możesz ustawić niestandardowe wartości dla fizycznych właściwości na poziomie części, niestandardowy materiał i warstwę materiałową. Silnik prioryzuje bardziej granularne definicje, gdy określa efektywne właściwości fizyczne części. Wartości w następującej liście są w porządku od najwyższego do najniższego priorytetu:
- Niestandardowe właściwości fizyczne części
- Niestandardowe właściwości fizyczne materiału niestandardowej części
- Niestandardowe właściwości fizyczne materiału części
- Domyślne właściwości fizyczne materiału części
CustomPhysicalProperties
Niestandardowe właściwości fizyczne pozwalają na dostosowanie różnych fizycznych aspektów Part, takich jak jego gęstość, frykcyjność i elastyczność.
Jeśli włączone, to właściwość pozwala konfigurować te fizyczne właściwości. Jeśli wyłączone, to fizyczne właściwości są zdeterminowane przez BasePart.Material części. Strona dla Enum.Material zawiera listę różnych materiałów części.
Przykłady kodu
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 Workspace.FluidForces jest włączony, powoduje, że silnik fizyczny oblicza siły aerodynamiczne na tym BasePart .
ExtentsSize
Faktyczna wielkość fizyczna BasePart wg silnika fizycznego, na przykład w wykrywaniu kolizji.
FrontSurface
Właściwość FrontSurface określa rodzaj powierzchni używanej dla kierunku -Z części. Gdy dwa oblicza części są położone obok siebie, mogą stworzyć współlokalizację między nimi. Jeśli ustawiony na Motor, BasePart.FrontSurfaceInput określa, jak powinien zachować się współlokalizacja między nimi.
Większość powierzchni typu renderuje teksturę na twarzy części, jeśli BasePart.Material jest ustawiony na Plastic. Niektóre powierzchnie typu, w tym Hinge, Motor i SteppingMotor, renderują zamiast tego 3D adornment. Jeśli ta właściwość jest ustawiona w oknie Właściwości, zostanie ona podświetlona w grze podobnie jak w przypadku
Przykłady kodu
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 dla kierunku -X części. Gdy dwa oblicza części są umieszczone obok siebie, mogą stworzyć stawiając połączenie między nimi. Ustawione na Motor, BasePart.LeftSurfaceInput określa sposób zachowania się stawiającego się łączenia między nimi.
Większość powierzchni typu renderuje teksturę na twarzy części, jeśli BasePart.Material jest ustawiony na Plastic. Niektóre powierzchnie typu, w tym Hinge, Motor i SteppingMotor, renderują zamiast tego 3D adornment. Jeśli ta właściwość jest ustawiona w oknie Właściwości, zostanie ona podświetlona w grze podobnie jak w przypadku
Przykłady kodu
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 użyteczne, gdy część nie powinna być renderowana dla określonego klienta, takiego jak to, jak gracz nie widzi ciała części swojego postaci, gdy skal
To właściwość modyfikuje przejrzystość lokalnej części poprzez następującą formułę, z wynikającymi wartościami pomiędzy 0 i 1.
clientTransparency = 1 - ((1 - part.Transparency) * (1 - part.LocalTransparencyModifier))
<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ść | Lokalny Przezroczystości Modyfikator | Przezroczystość strony serwera | Przezroczystość strony klienta |
---|
Locked
Właściwość Zablokowana określa, czy part (lub model , w którym jest ona zawarta) może być wybrana w Roblox Studio poprzez kliknięcie na nią. Ta właściwość jest najczęściej włączona na częściach w środowiskowych modelach, które nie są edytowane w tej chwili.
Przykłady kodu
-- 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łasnością czytelną, która opisuje produkt głośnego obwodu i gęstości. Zwracana jest przez funkcję Class.BasePart:GetMass()|GetMass ".
- Gęstość części jest określona przez jej Material lub CustomPhysicalProperties, jeśli jest to określone.
Massless
Jeśli właściwość ta jest włączona, BasePart nie będzie przyczyniać się do całkowitej masy lub niesprawności jego zgromadzenia, o ile jest spawana na innym kawałku, który ma masę.
Jeśli część jest własną częścią korzenia według AssemblyRootPart , to będzie to ignorowane dla tej części, a nadal będzie ona wkładać masę i nieruchomość do swojej konstrukcji, jak normalna część. Części, które są bezmasowe, nigdy nie powinny stać się częścią korzenia zespołu, chyba że wszystkie pozostałe części w zespołu są również bezmasowe.
Może to być przydatne dla rzeczy takich jak opcjonalne akcesoria na pojazdach, które nie chcesz wpływać na sterowanie samochodem lub masywne siatki renderujące wiążące się z prostszym modelem kolizji.
Zobacz również Zwierzęta, artykuł opisujący części korzenia i sposób ich użycia.
Material
Właściwość Materiał pozwala na ustawienie tekstury i domyślnych właściwości fizycznych części (w przypadku, gdy BasePart.CustomPhysicalProperties nie jest ustawiony). Domyślny materiał plastikowy ma bardzo lekstą teksturę, a materiał SmoothPlastic nie ma tekstury w wszystko. Niektóre tekstury materiału, takie jak DiamondPlate i Granite, mają
Ustawienie tego właściwości użyje w BasePart.CustomPhysicalProperties własności fizycznej. Na instancja, DiamondPlate jest bardzo gęstym materiałem, podczas gdy Wood jest bardzo lekki. Densytywność części określa, czy będzie pływać w wodach terenowych.
Materiał szkła zmienia zachowanie renderowania na umiarkowanych ustawieniach grafiki. Zastosowuje trochę odblasku (podobny do BasePart.Reflectance ) i perspektywnej deformacji. Efekt jest szczególnie wyraźny na kształtnych częściach (zestawienie BasePart.Shape do Kul). Nie widoczne są obiekty i szkła za szkłem.
Przykłady kodu
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 szuka instancji MaterialVariant z określonym BasePart.Material i MaterialService wpisywać. Jeśli znajdzie udanie szukając instancji Material▸ 1> Class.Material1>, używa tej instancji Material▸ 4> Class.BasePart.Material4>, aby zastąpić domyślną instancję Material▸ 7>Class.MaterialService7>.
Orientation
Właściwość Orientacji opisuje obroty części w stopniach wokół osi X, Y i Z używając Vector3. Obroty są stosowane w porządku Y → X → Z
Gdy ustawisz tę właściwość dowolne Welds lub Motor6Ds połączone z tą częścią będzie miało odpowiadające C0 lub 2>Class.JointInstance.C1|C12> wła
WeldSeconds będzie również tymczasowo wyłączony i ponownie włączony podczas przesuwania.
Przykłady kodu
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 pivot części od jej CFrame, które jest part:GetPivot() , jest to tyle samo jak part.CFrame * part.PivotOffset .
Ułatwia to ustawienie pivot na lokalizację w przestrzeni lokalnej , ale ustawienie pivot części na lokalizację w przestrzeni świata można zrobić następująco:
local part = workspace.BluePartlocal desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)
Przykłady kodu
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)
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ść pozycji opisuje koordynaty części używając part . Odbiera pozycję Vector3 części, ale można również ustawiać.
Gdy ustawisz tę właściwość dowolne Welds lub Motor6Ds połączone z tą częścią będzie miało odpowiadające C0 lub 2>Class.JointInstance.C1|C12> wła
WeldSeconds będzie również tymczasowo wyłączony i ponownie włączony podczas przesuwania.
ReceiveAge
To powoduje, że czas w sekundach, odkąd fizyka części została po raz ostatni zaktualizowana na lokalnym kliente (lub serwerze). Wynosi 0, gdy część nie ma fizyki (Zakotwiczone)
Reflectance
Właściwość Odbicia określa, ile part odbija niebo. Wartość 0 wskazuje, że część nie jest odzwierciedlająca w wszystko, a wartość 1 wskazuje, że część powinna całkowicie odzwierciedlać.
Reflektorowanie nie jest zalecone przez BasePart.Transparency, chyba że część jest całkowicie przejrzysta, w przeciwnym wypadku reflektorowanie nie będzie renderowane w wszystko. Reflektorowanie może lub może nie być ignorowane w zależności od BasePart.Material części.
Przykłady kodu
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 opisuje najmniejszą zmianę rozmiarów, która jest możliwa dzięki metodzie BasePart:Resize(). Różni się ona między implementacjami BasePart abstrakcyjnej klasy. Na instancja, Part ma to ustaw
Przykłady kodu
-- 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ść ResizeableFaces (z e i nie ResizableFaces) opisuje używanie obiektu Faces na różnych twarzy, na których można zmniejszyć roz
Przykłady kodu
-- 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 dla +X kierunku części. Gdy dwa oblicza części są umieszczone obok siebie, mogą stworzyć stawiając na Motor, że BasePart.RightSurfaceInput determinuje, jak powinien zachować się stawiający na motorze. Jeśli ustawiony na Motor, że Class.BasePart.RightSurfaceInput determinuje, jak powinien zachować się stawiający na motyw.
Większość powierzchni typu renderuje teksturę na twarzy części, jeśli BasePart.Material ustawiony jest na Plastic. Niektóre powierzchnie typu, w tym Hinge, Motor i SteppingMotor, renderują zamiast tego 3D adornment. Jeśli ta właściwość jest zaznaczona w oknie Właściwości, zostanie ona podświetlona w grze podobnie jak w przypad
Przykłady kodu
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
Ta właściwość jest liczbą między -127 i 127, która ma pierwszeństwo nad wszystkimi innymi zasadami sortowaćczęści korzeni. Gdy rozważasz wiele części, które nie są Anchored i dzielą tę samą wartość Massless
Możesz użyć tego właściwości, aby kontrolować, która część z wersji zbioru jest korzeniem i utrzymać korzeń stabilnym w przypadku zmiany rozmiarów.
Zobacz również Zwierzęta, artykuł opisujący części korzenia i sposób ich użycia.
Rotation
Rotacja części w stopniach dla trzech osi.
Gdy ustawisz tę właściwość dowolne Welds lub Motor6Ds połączone z tą częścią będzie miało odpowiadające C0 lub 2>Class.JointInstance.C1|C12> wła
WeldSeconds będzie również tymczasowo wyłączony i ponownie włączony podczas przesuwania.
Size
Właściwość Size części określa jej wymiary wizualne, a Class.BasePart.ExtentsSize|ExtentsSize reprezentuje wymiary fizyczne używane przez silnik fizyki, tak
Rozmiar części określa jej masę, która jest dana przez BasePart:GetMass(). Część's Size jest używana przez różne inne obiekty:
- ParticleEmitter do określenia obszaru, z którego pochodzą cząsteczki.
- BlockMesh do częściowego określenia renderowanego proizwiertnego prisma.
- SpecialMesh dla pewnych MeshTypes, aby określić rozmiar renderowanej siatki.
- SurfaceLight do określenia przestrzeni do oświetlenia.
Przykłady kodu
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 dla kierunku +Y części. Gdy dwa oblicza części są umieszczone obok siebie, mogą stworzyć stawiając na Motor, the BasePart.TopSurfaceInput determinuje, jak powinien zachować się stawiający na silnik. Jeśli ustawiony na Motor, the Class.BasePart.TopSurfaceInput określa, jak powinien zachować się stawiający na silnik.
Większość powierzchni typu renderuje teksturę na twarzy części, jeśli BasePart.Material ustawiony jest na Plastic. Niektóre powierzchnie typu - skręt, silnik i krokodyl - renderują zamiast tego 3D adornment. Jeśli ta właściwość jest zaznaczona w oknie Właściwości, zostanie ona podświetlona w grze podobnie jak w przypad
Przykłady kodu
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
Przezroczystość właściwość kontroluje widoczność części na skali 0 do 1, gdzie 0 jest całkowicie widoczny (nieprzezroczysty), a wartość 1 jest całkowicie niewidoczny (nie jest renderowany wszystko).
BasePart.Reflectance może zmniejszyć ogólną przejrzystość cegły ustawionej w określonej wartości blisko 1.
Podczas gdy całkowicie przejrzyste części nie są renderowane w wszystko, częściowo przejrzyste obiekty mają pewne koszty renderowania. Posiadanie wielu części translucentnych może spowolnić wykonywaniegra.
Gdy części są przezroczyste, może się zdarzyć, że renderowanie porządku może działać nieprzewidywalnie - spróbuj utrzymać półprzezroczyste części z półprzezroczystych, aby uniknąć tego.
Class.BasePart.LocalTransparency jest mnożnikiem przejrzystości, który jest widoczny tylko dla lokalnego klienta.
Przykłady kodu
-- 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()
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
Zastosowuje natychmiastowy siłowy impuls kątowy do tej części, powodując, że zgromadzenie się kręci.
Wynikająca z impulsu prędkość kątowa opiera się na mass konstrukcji. Więc większa prędkość ruchu wymaga większego impulsu. Impulsy są przydatne w przypadkach, w których chcesz natychmiastowo zastosować siłę, taką jak eksplozja lub kolizja.
Jeśli część jest własnością serwera, funkcja ta musi być wywołana z serwera Class.Script (nie z serwera Class.
Parametry
Wektor siły do zastosowania na zgromadzeniu jako impuls.
Zwroty
ApplyImpulse
Funkcja ta stosuje natychmiastowy impuls siłowy do zgromadzenia tego części.
Siła jest zastosowana w center of mass, więc wynikające ruchy będą tylko liniowe.
Wynikająca z impulsu prędkość opiera się na mass konstrukcji. Więc większa prędkość ruchu wymaga większego impulsu. Impulsy są przydatne w przypadkach, w których chcesz natychmiastowo zastosować siłę, taką jak eksplozja lub kolizja.
Jeśli część jest własnością serwera, funkcja ta musi być wywołana z serwera Class.Script (nie z serwera Class.
Parametry
Wektor siły do zastosowania na zgromadzeniu jako impuls.
Zwroty
ApplyImpulseAtPosition
Funkcja ta stosuje natychmiastowy impuls siłowy do montażu tej części w określonym położeniu w przestrzeni świata.
Jeśli pozycja nie jest w center of mass, impuls powoduje ruch pozycyjny i obrotowy.
Wynikająca z impulsu prędkość opiera się na mass konstrukcji. Dlatego większe masy są potrzebne do przesuwania większych zbiorów. Impulsy są przydatne w przypadkach, w których rozwija się siła natychmiastowo, na przykład w eksplozji lub kolizji.
Jeśli część jest własnością serwera, funkcja ta musi być wywołana z serwera Class.Script (nie z serwera Class.
Parametry
Wektor siły do zastosowania na zgromadzeniu jako impuls.
Pozycja, w przestrzeni świata, aby zastosować impuls.
Zwroty
CanCollideWith
Zwraca, czy części mogą się ze sobą uderzyć, czy nie. Ta funkcja uwzględnia grupy kolizji dwóch części. Ta funkcja będzie błędna, jeśli określona część nie jest częścią bazy.
Parametry
Sprawdzana jest określona część w celu ustalenia zgodności.
Zwroty
Czy części mogą uderzać się nawzajem.
CanSetNetworkOwnership
Funkcja CanSetNetworkOwnership sprawdza, czy możesz ustawić własność sieci części.
Wartość zwracana funkcji sprawdza, czy możesz wejść BasePart:SetNetworkOwner() lub BasePart:SetNetworkOwnershipAuto() bez spotkania z błędem. Wynika prawdziwie, jeśli możesz zmodyfikować/przeczytać własność sieci, lub wraca true, a powodem nie możesz, jako ciąg.
Zwroty
Czy możesz zmodyfikować lub przeczytać właściwość sieci i powód.
Przykłady kodu
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 łączników elastycznych.
Jeśli recursive jest prawdą, ta funkcja zwraca wszystkie części w zestawie ściśle powiązane z BasePart.
Sterowane połączenia
Gdy połączenie dwóch części tworzy jedną całość (Part0 → Part1) , połączenie jest elastyczne jeśli fizyka Part1 jest całkowicie zablokowana przez 1> Part01>. Oznacza to tylko następujące rodzaje połączeń:
Parametry
Zwroty
GetJoints
Zwróć wszystkie Współczynniki lub ograniczenia, które są powiązane z tym elementem.
Zwroty
Materiały wszystkich stosowanych do części jointów lub约束ów.
GetMass
GetMass zwraca wartość czytelnej własności Mass.
Funkcja ta przewyższa właściwość Masy. Wciąż jest wspierana dla poprzednich wersji; powinieneś używać bezpośrednio właściwości Masy.
Zwroty
Masa części.
Przykłady kodu
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 bieżącego gracza, który jest właścicielem sieci w tej części, lub zero w przypadku serwera.
Zwroty
Obecny gracz, który jest właścicielem sieci tego elementu lub zero w przypadku serwera.
GetNetworkOwnershipAuto
Wróщает prawdę, jeśli silnik gry automatycznie zdecyduje 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ęść zestawu. Gdy poruszasz zestaw części za pomocą CFrame ., ważne jest, aby poruszyć tę podstawową część (to przeniesie wszystkie inne części połączone z nią). Więcej informacji znajduje się w artykule Zestawy.
Funkcja ta przewyższa właściwość AssemblyRootPart. Wciąż jest wspierana dla poprzednich wersji, ale powinieneś używać bezpośrednio AssemblyRootPart.
Zwroty
Podstawowa część zestawu (kolekcja połączonych ze sobą części).
GetTouchingParts
Wyświetla tabelę wszystkich części, które fizycznie wchodzą w interakcję z tą częścią. Jeśli część sama w sobie ma ustawioną opcję Coll
Zwroty
Tabela wszystkich części, które mogą się skrzyżować i uderzyć z tą częścią.
GetVelocityAtPosition
Zwraca liniową prędkość zgromadzenia części w danej pozycji względem tej części. Można go używać do zidentyfikowania liniowej prędkości części w zgromadzeniu innej niż część korzenna. Jeśli zgromadzenie nie ma kątowej prędkości, to liniowa prędkość zawsze będzie taka sama dla każdej pozycji.
Parametry
Zwroty
IsGrounded
Zwraca prawdę, jeśli obiekt jest połączony z częścią, która go utrzyma w miejscu (na przykład, Anchored część), w przeciwnym razie zwraca fałszywy. W zestawie, który ma część Class.BasePart.Anchored|Anchored ", każda inna część jest zasadzona.
Zwroty
Czy obiekt jest połączony z częścią, która go utrzyma w miejsce.
Resize
Zmienia rozmiar obiektu, tak jak używając narzędzia Studio do zmiany rozmiarów.
Parametry
Strona do skalowania.
Ile należy rosnąć / zmniejszać na określonej stronie.
Zwroty
Czy część zostanie zmniejszona.
SetNetworkOwner
Ustawia podanego gracza jako właściciela sieci dla tego i wszystkich połączonych części. Gdy playerInstance jest nil, serwer będzie właścicielem zamiast gracza.
Parametry
Gracz jest dawcą własności sieciowej części.
Zwroty
SetNetworkOwnershipAuto
Pozwala silnikowi gry dynamicznie zdecydować, kto będzie odpowiadał za fizykę części (jednego z klientów lub serwera).
Zwroty
TorqueToAngularAcceleration
Parametry
Zwroty
IntersectAsync
Tworzy nowy IntersectOperation z geometrią intersekcji części i innych części w podanym arkuszu. Tylko Parts są wspierane, nie Terrain lub 1> Class.MeshPart|MeshParts</
Poniższe właściwości z części wezwanej są zastosowane do wynikającego IntersectOperation :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3> Class.Base
W następnym porównaniu obrazu IntersectAsync() jest wezwany na fioletowym bloku używającym tabeli zawierającej niebieski blok. W rezultacie IntersectOperation rozwiązuje się w kształcie geometrii intersekcji obu części.
Notatki
- Pierwotne części pozostają nieuszkodzone po udanym połączeniu. W większości przypadków powinieneś Destroy() wszystkie oryginalne części i związany z powrotem IntersectOperation z tym samym miejscem, co BasePart.
- Domyślnie kolory twarzy wynikającego połączenia są pożyczone z właściwości Color części oryginalnych. Aby zmienić całą połączenie na określony kolor, ustaw jego UsePartColor wartość na true .
- Jeśli operacja intersekcji wyniosłaby część z więcej niż 20 000 trójkątów, zostanie ona uproszczona do 20 000 trójkątów.
Parametry
Obiekty biorące udział w intersekcji.
Wartość Enum.CollisionFidelity dla wynikającej IntersectOperation.
Wartość Enum.RenderFidelity wynosząca Class.RenderFidelity.
Zwroty
Wynikające IntersectOperation z domyślnym nazwą Intersect .
SubtractAsync
Tworzy nowy UnionOperation z części, minus geometrii zajętej przez części w danej matrycy. Tylko Parts są wspierane, nie Terrain lub 1> Class.MeshPart|MeshParts1>.
Uwaga, że wynikujące połączenie nie może być puste z powodu odejścia. Jeśli operacja wyniknie w pełni pustą geometrię, to nie powoduje to powodzenia.
W następującym porównaniu obrazu, SubtractAsync() jest wezwany na niebieskim cylindrze używając tabeli zawierającej purpurowy blok. W rezultacie UnionOperation rozwiązuje się w kształcie, który odrzuca geometrię bloku z tej cylindry.
Parametry
Obiekty biorące udział w odejmowaniu.
Wartość Enum.CollisionFidelity dla wynikającej UnionOperation .
Wartość Enum.RenderFidelity wynosząca Class.RenderFidelity.
Zwroty
Wynikające UnionOperation z domyślnym nazwą Union .
Przykłady kodu
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 podanym array. Tylko Parts są wspierane, nie Terrain lub 1> Class.MeshPart|MeshParts1> . Podobnie
Poniższe właściwości z części wezwanej są zastosowane do wynikającego UnionOperation :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3> Class.Base
W następnym porównaniu obrazu UnionAsync() jest wezwany na niebieskim bloku używając tabeli zawierającej purpurowy cylinder. W rezultacie UnionOperation rozwiązuje się w kształcie połączonej geometri obu części.
Notatki
- Pierwotne części pozostają nieuszkodzone po udaną operację połączenia. W większości przypadków powinieneś Destroy() wszystkie oryginalne części i związany z powrotem UnionOperation z tym samym miejscem co BasePart.
- Domyślnie unia rezultatu szanuje właściwość Color każdej z jego części. Aby zmienić całą unię na określony kolor, ustaw jego właściwość UsePartColor na true .
- Jeśli operacja unii wyniosłaby część z więcej niż 20 000 trójkątów, zostanie ona uproszczona do 20 000 trójkątów.
Parametry
Obiekty biorące udział w unii z wzywającą częścią.
Wartość Enum.CollisionFidelity dla wynikającej UnionOperation .
Wartość Enum.RenderFidelity wynosząca Class.RenderFidelity.
Zwroty
Wynikające UnionOperation z domyślnym nazwą Union .
Przykłady kodu
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
Występuje po wstrzymaniu części pod podobnymi warunkami do tych z BasePart.Touched .
Ten ewent działa wraz z Workspace.TouchesUseCollisionGroups, aby określić, czy grupy kolizji są uznane za wykrycie.
Parametry
Przykłady kodu
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 wtedy się uruchomi, gdy część będzie miała kontakt z inną częścią. Na instancja, jeśli część dotknie się części PartB , to 1> Class.BasePart.Touched|PartA.Touched
Ten wąż tylko zostanie wykonany w wyniku fizycznego ruchu, więc nie zostanie wykonany, jeśli właściwość CFrame zostanie zmieniona tak, że część pokrywa się z inną częścią. Oznacza to również, że przynajmniej jedna z części zaangażowanych nie może być nie zostać zakotwiczone
Ten ewent działa wraz z Workspace.TouchesUseCollisionGroups, aby określić, czy grupy kolizji są uznane za wykrycie.
Parametry
Druga część, która skontaktowała się z podaną częścią.
Przykłady kodu
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)
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