WorldRoot
*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.
Klasa bazowa ta zapewnia interfejs API dla każdej instancji przeznaczonej do obsługi 3D zapytania przestrzennych i symulacji, takich jak Workspace i WorldModel.
Podsumowanie
Właściwości
Właściwości odziedziczeni z: ModelUstawia poziom szczegółowości na modelu dla doświadczeń z włączonym strumieniem instancji.
Kontroluje zachowanie przesyłania modelu na Models gdy włączono przesyłanie instancji.
Główna część Model lub nil jeśli nie jest wyraźnie ustawiona.
Własność tylko dla edytora używana do skalowania modelu wokół jego osi. Ustawienie tej właściwości przeniesie skalę tak, jakby Model/ScaleTo została wezwana na niej.
Określa, gdzie znajduje się osiować punkt obrotowy , który nie ma ustawionego zestawu.
Metody
Zwraca prawdę, jeśli którykolwiek z podanych BasePart dotyka innych części.
Rzuca kształt bloku w określonym kierunku i zwraca RaycastResult, jeśli kształt uderza w komórkę BasePart lub Terrain.
Zwraca tablicę części, których ramki przylegania pokrywają dany pudełko.
Zwraca tablicę części, których pudełka graniczne pokrywają daną sferę.
Zwraca tablicę części, których przestrzeń zajęta jest współdzielona z daną częścią.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Przesuwa określoną część do określonej lokalizacji za pomocą odwrotnej kinematyki, zamiast przenosić ją bezpośrednio tam, aby zapewnić, że wszelkie stawki, ograniczenia lub kolizje, w których uczestniczy część, pozostają fizycznie zadowolone.
Rzuca promień za pomocą pochodzenia, kierunku i opcjonalnego RaycastParams , następnie zwraca RaycastResult , jeśli właściwy obiekt lub teren przecinają promień.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Rzuca kształt sferyczny w określonym kierunku i zwraca RaycastResult, jeśli kształt uderza w komórkę BasePart lub Terrain.
Przyspiesza symulację dla części na świecie w przód w oparciu o określony wzrost czasu i opcjonalny zestaw BaseParts.
Ustawia ten model, aby był trwały dla określonego gracza. ModelStreamingMode musi zostać ustawione na PersistentPerPlayer , aby zachowanie zostało zmienione w wyniku dodania.
Zwraca opis woluminu, który zawiera wszystkie części modelu.
Zwraca rozmiar najmniejszego pudełka ograniczającego, które zawiera wszystkie BaseParts w Model, zgodnie z Model.PrimaryPart, jeśli jest ustawione.
Zwraca wszystkie obiekty Player , które ten obiekt modelowy jest trwały dla.Zachowanie różni się w zależności od tego, czy metoda ta jest wywoływana z Script lub LocalScript.
Zwraca kanoniczną skalę modelu, która domyślnie wynosi 1 dla nowo utworzonych modeli i zmieni się, gdy zostanie skalowana za pomocą Model/ScaleTo.
Przesuwa PrimaryPart do określonej pozycji. Jeśli nie zaznaczono głównej części, zostanie użyta część korzenna modelu.
Sprawia, że ten model nie jest już trwały dla określonego gracza.ModelStreamingMode musi zostać ustawione na PersistentPerPlayer aby zachować się zmieniło w wyniku usunięcia.
Ustawia czynnik skali modelu, dostosowując rozmiar i lokalizację wszystkich potomnych instancji tak, aby miały ten czynnik skali w stosunku do ich początkowych rozmiarów i lokalizacji, gdy czynnik skali wynosił 1.
Przesuwa Model przez podany odległość Vector3, zachowując orientację modelu.Jeśli istnieje już inny BasePart lub Terrain w nowej pozycji, wtedy Model pokryje powiedziany obiekt.
Otrzymuje pivot z PVInstance .
Przekształca PVInstance wraz z całym jego potomkiem PVInstances tak, że osie zostaną teraz umieszczone w określonym CFrame .
Właściwości
Metody
ArePartsTouchingOthers
ArePartsTouchingOthers zwraca prawdę, jeśli co najmniej jedna z podanych BasePart dotyka innych części.Dwie części są uważane za "dotykanie", jeśli znajdują się w granicy dystansu, overlapIgnored .
Jeśli nie zostaną dostarczone części, zwracany jest fałsz.
Parametry
Lista kontroli części, aby sprawdzić, czy któreś części z listy dotykają jakichkolwiek części nie z listy.
Próg pokrycia części w szpilkach, który jest ignorowany przed uznaniem części za dotykające.
Zwroty
Przykłady kodu
Kodowy blok poniżej pokazuje, jak używać WorldRoot:ArePartsTouchingOthers(), aby sprawdzić, czy części w liście dotykają jakichkolwiek części w przestrzeni roboczej nie na liście.
Najpierw skrypt tworzy dwie kwadratowe części, które pokrywają się 1 szpilką, Part1 i Part2.Następnie drukuje wartość zwróconą przez ArePartsTouchingOthers() przy przekazaniu części 1 w partList w trzech różnych wartościach pokrycia: 0, 0.999 i 1.Pierwszy raz, gdy funkcja ArePartsTouchingOthers() jest wywoływana, zwraca się false, ponieważ wartości pokrycia są mniejsze niż odległość, w której pokrywają się części 1 i 2.Trzecie wezwanie zwraca true, ponieważ wartość pokrycia jest równa odległości, w której części się pokrywają.
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- Prawda
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- Prawda
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
Rzuca kształt bloku w określonym kierunku i zwraca pierwszą kolizję z komórką BasePart lub Terrain.Jest to analogiczne do sposobu, w jaki WorldRoot:Raycast() rzuca liniowy promień w kierunku, aby znaleźć kolizję, ale używa 3D kształtu zamiast promienia.
W przeciwieństwie do WorldRoot:GetPartsInPart() , ta metoda nie wykrywa BaseParts, że początkowo nakłada się na kształt.
Jeśli wykryto trafienie, zostanie zwrócony RaycastResult zawierający informacje o trafieniu.Właściwość Distance reprezentuje odległość, jaką musi pokonać forma, aby znaleźć trafienie, a właściwość Position reprezentuje punkt styku, który powoduje trafienie.
Ta metoda rzuca błąd, jeśli przekazano nieprawidłowe wejścia CFrame , rozmiar lub kierunek.
Parametry
Początkowa pozycja i rotacja kształtu bloku kasty.
Rozmiar bloku rzucającego w szpilkach. Maksymalny rozmiar to 512 szpilek.
Kierunek rzucania kształtu, z magnitudą reprezentującą maksymalną odległość, jaką kształt może pokonać. Maksymalna odległość wynosi 1024 szpilki.
Zwroty
Przykłady kodu
Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end
BulkMoveTo
Funkcja ta przenosi tabelę BaseParts do tabeli CFrames bez konieczności uruchamiania domyślnych wydarzeń właściwości Changed.Zapewnia to bardzo szybki sposób przesuwania dużej liczby części, ponieważ nie musisz płacić za oddzielne zestawy właściwości dla każdej pojedynczej części.
Trzeci argument pozwala dalej optymalizować operację przemieszczania.Domyślnie wydarzenie Changed każdej części uruchamia się dla Position, Orientation i CFrame.Jeśli jednak określisz FireCFrameChanged jako trzeci argument, uruchomi się tylko wydarzenie Changed dla właściwości CFrame.
Zauważ, że powinieneś używać tej funkcji tylko wtedy, gdy jesteś pewien, że ruch części jest butelkowany w twoim kodzie.Po prostu ustawienie właściwości CFrame poszczególnych części i spawanych modeli jest wystarczająco szybkie w większości przypadków.
Parametry
Zwroty
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() zwraca arkusz części, których pudełka przylegające pokrywają pudełko o objętości opisanej za pomocą podanego centrum ( CFrame ) i rozmiarze ( Vector3 ).
Jak podkreślono, ta metoda zapytania przestrzennego skutecznie rozważa objętość skrzynek przylegających części, a nie ich rzeczywistą objętość zajęcia.Może to być ważne, gdy rozważa się cylindry, kule, związki i MeshParts, które mają kształty nieblokowe.W przypadkach, gdy dokładność jest szczególnie ważna, użyj WorldRoot:GetPartsInPart() zamiast tego, albo dalej filtruj wyniki tej metody samodzielnie.
Ta metoda używa obiektu do opisania ponownie używalnych części zapytania przestrzennego, takich jak lista obejmująca lub wykluczająca, maksymalna liczba części do zapytania, grupa kolizji, którą należy użyć, i czy zapytanie preferuje wartość części skrzyżowanych nad jej wartością.
Parametry
Lokalizacja centrum objętości skrzynki podanej do zapytania.
Rozmiar danej objętości skrzynki, którą należy zapytać.
Zawiera ponownie używalne części parametrów zapytania przestrzennego.
Zwroty
Mała liczba BaseParts, która pasowała do zapytania przestrzennego.
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() zwraca matrycę części, których pudełka przyłączeniowe pokrywają się z kulą, której objętość opisano za pomocą podanego centrum ( Vector3 ) i promienia (number).
Jak podkreślono, ta metoda zapytania przestrzennego skutecznie rozważa objętość skrzynek przylegających części, a nie ich rzeczywistą objętość zajęcia.Może to być ważne, gdy rozważa się cylindry, kule, związki i MeshParts, które mają kształty nieblokowe.W przypadkach, gdy dokładność jest szczególnie ważna, użyj WorldRoot:GetPartsInPart() zamiast tego, albo dalej filtruj wyniki tej metody samodzielnie.
Ta metoda używa obiektu do opisania ponownie używalnych części zapytania przestrzennego, takich jak lista obejmująca lub wykluczająca, maksymalna liczba części do zapytania, grupa kolizji, którą należy użyć, i czy zapytanie preferuje wartość części skrzyżowanych nad jej wartością.
Parametry
Lokalizacja centrum objętości danej sfery, którą należy zapytać.
Promień obszaru danej objętości sfery, której należy wyszukać.
Zawiera ponownie używalne części parametrów zapytania przestrzennego.
Zwroty
Mała liczba BaseParts, która pasowała do zapytania przestrzennego.
GetPartsInPart
WorldRoot:GetPartsInPart() zwraca arkusz części, których przestrzeń zajęta jest współdzielona z daną częścią (która musi istnieć w tej samej WorldRoot co części, które mają być zapytane).Ta metoda może być używana w miejsce BasePart:GetTouchingParts() i jest ogólnie lepszym wyborem.
Jak wspomniano, ta metoda zapytania przestrzennego rozważa dokładną objętość zajętą przez daną część za pomocą pełnego sprawdzaćkolizji geometrycznej.Jako przykład, część wklęsła/próżniowa nie pasuje do zapytanych części w niej, chyba że rzeczywiście pokrywają się z taką częścią lub dotykają jej.Dla prostszych objętości rozważ użycie WorldRoot:GetPartBoundsInBox() lub WorldRoot:GetPartBoundsInRadius(), ponieważ są mniej dokładne, ale działają wydajniej.
Ta metoda używa obiektu do opisania ponownie używalnych części zapytania przestrzennego, takich jak lista obejmująca lub wykluczająca, maksymalna liczba części do zapytania, grupa kolizji, którą należy użyć, i czy zapytanie preferuje wartość części skrzyżowanych nad jej wartością.
Parametry
Część, której głośność ma być porównana z innymi częściami.
Zawiera ponownie używalne części parametrów zapytania przestrzennego.
Zwroty
Mała liczba BaseParts, która pasowała do zapytania przestrzennego.
IKMoveTo
Funkcja ta przenosi określoną część do określonego miejsca za pomocą odwrotnej kinematyki zamiast przenosić ją bezpośrednio tam, aby zapewnić, że wszelkie stawki, constraints lub kolizje, w których uczestniczy część, pozostają fizycznie zadowolone.Obecnie funkcja ta jest dostępna w Studio tylko do plugins, ponieważ obecnie konfliktuje się z fizyką uruchomionej gra.
Tłumaczenie sztywności to liczba pomiędzy 0 a 1 określająca, jak agresywnie dopasować pozycję części do pozycji części docelowego CFrame. Obróć sztywność to liczba pomiędzy 0 a 1 określająca, jak agresywnie dopasować rotację części do rotacji części docelowego CFrame.
Na przykład:
- Jeśli tłumaczenie sztywności i obrót sztywności są obie równe 1, część zostanie przeniesiona dokładnie do ramy docelowej, niezależnie od tego, jakie są na niej ograniczenia fizyczne.
- Jeśli tłumienie i obrót sztywności są równe 0,5, część spróbuje przesunąć się dokładnie do wybranej CFrame, ale może zostać wyparta przez fizyczne ograniczenia.
- Jeśli tłumienie sztywności i obrót sztywności są obie równe 0, wówczas celowe CFrame zostanie zignorowane, a ograniczenia fizyczne zostaną rozwiązane dla obiektu w pozycji, w której się znajdował.
Parametry
Część, która jest przenoszona.
Lokalizacja, do której należy przenieść określoną część.
Liczba pomiędzy 0 a 1 określająca, jak agresywnie dopasować pozycję części do pozycji części docelowej CFrame .
Liczba pomiędzy 0 a 1 określająca, jak agresywnie dopasować rotację części do rotacji części docelowej CFrame .
Pozwala określić, jakie obiekty powinny być dotknięte przez rozdzielczość fizyczną.
Zwroty
Raycast
Rzuca promień za pomocą pochodzenia, kierunku i opcjonalnego RaycastParams.Jeśli znajdzie właściwą komórkę BasePart lub Terrain, zostanie zwrócona RaycastResult, zawierająca wyniki operacji.Jeśli nie zostanie podany żaden obiekt RaycastParams, domyślne są używane (wszystkie części są rozważane, a Terrain woda nie jest ignorowana).
Zauważ, że długość (magnitudo) wektora kierunkowego jest ważna, ponieważ obiekty/teren oddalone dalej niż jej długość nie zostaną przetestowane.Jeśli używasz CFrame do pomocy w tworzeniu komponentów promienia, rozważ użycie CFrame.LookVector jako wektora kierunkowego i pomnożenie go przez żądaną długość, jak pokazano w poniższym przykładzie.Maksymalna długość wektora kierunkowego wynosi 15 000 ćwieków.
Ta metoda nie używa obiektu , ale jego komponenty pochodzenia i kierunku można pożyczyć z i .
Parametry
Punkt pochodzenia promienia.
Wektor kierunkowy promienia. Zauważ, że długość tego wektora ma znaczenie, ponieważ części/teren oddalone dalej niż jego długość nie zostaną przetestowane.
Obiekt używany do określania kwalifikacji trafienia w operacji raycast.Jeśli nie zostaną podane, domyślne wartości są używane, gdzie wszystkie części są rozważane, a Terrain woda nie jest ignorowana.
Zwroty
Przykłady kodu
Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end
Shapecast
Parametry
Zwroty
Spherecast
Rzuca kulistą formę w określonym kierunku i zwraca pierwszą kolizję z komórką BasePart lub Terrain .Jest to analogiczne do sposobu, w jaki WorldRoot:Raycast() rzuca liniowy promień w kierunku, aby znaleźć kolizję, ale używa 3D kształtu zamiast promienia.
W przeciwieństwie do WorldRoot:GetPartsInPart() , ta metoda nie wykrywa BaseParts, że początkowo nakłada się na kształt.
Jeśli wykryto trafienie, zostanie zwrócony RaycastResult zawierający informacje o trafieniu.Właściwość Distance reprezentuje odległość, jaką musi pokonać forma, aby znaleźć trafienie, a właściwość Position reprezentuje punkt styku, który powoduje trafienie.
Ta metoda rzuca błąd, jeśli przekazano nieprawidłowe wpisy promienia lub kierunku.
Parametry
Początkowa pozycja kształtu sferowego rzucanego.
Promień kształtu sferowego w szpilkach. Maksymalny promień wynosi 256 szpilek.
Kierunek rzucania kształtu, z magnitudą reprezentującą maksymalną odległość, jaką kształt może pokonać. Maksymalna odległość wynosi 1024 szpilki.
Zwroty
Przykłady kodu
Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end
StepPhysics
Przyspiesza symulację dla części na świecie w przód w oparciu o określony wzrost czasu i opcjonalny zestaw BasePart.Gdy określono zestaw części, tylko te części zostaną symulowane, a wszystkie inne części na świecie zostaną potraktowane jako zakotwiczone.Gdy ten argument zostanie pominięty, wszystkie części na świecie zostaną uwzględnione w symulacji.Określony wzrost czasu może być dowolną pozytywną liczbą, z większymi wartościami zwiększając czas wykonania funkcji.W zależności od wartości przyrostu czasu system fizyczny może podzielić go na wiele pojedynczych kroków, aby zachować dokładność i stabilność symulacji.Nawet jeśli funkcja wykonuje wiele substępów, wyniki symulacji zostaną zobaczone tylko po zakończeniu funkcji.Aby wizualizować poszczególne kroki symulacji, funkcję można wezwać raz na krok renderowania za pomocą wydarzenia RunService.RenderStepped.
Parametry
Ilość czasu, która zostanie symulowana. Ten argument musi być liczbą pozytywną. Większe wartości zwiększą czas wykonania tej funkcji.
Opcjonalna lista części, które zostaną symulowane. Zestaw musi zawierać instancje typu BasePart ; wszystkie inne typy zostaną zignorowane.
Zwroty
Przykłady kodu
Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.
local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)