WorldRoot
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Cette classe de base fournit une API pour toute instance destinée à gérer des requêtes et des simulations spatiales 3D, telles que Workspace et WorldModel.
Résumé
Propriétés
Propriétés hérités de ModelDéfinit le niveau de détail sur le modèle pour les expériences avec streaming d'instance activé.
Contrôle le comportement de streaming du modèle sur Models lorsque le streaming d'instance est activé.
La partie principale de la Model ou nil si elle n'est pas explicitement définie.
Propriété réservée aux éditeurs utilisée pour dimensionner le modèle autour de son pivot. Le réglage de cette propriété déplacera la mesure comme si Model/ScaleTo était appelé sur elle.
Détermine où se trouve le pivot d'un Model qui ne fait pas **** avoir un ensemble Model.PrimaryPart.
Méthodes
Retourne vrai si l'une des parties données BasePart touche n'importe quelle autre partie.
Lance une forme de bloc dans une direction donnée et renvoie un RaycastResult si la forme frappe une cellule BasePart ou Terrain .
Retourne un ensemble de parties dont les boîtes de bordure se chevauchent sur une boîte de modélisationdonnée.
Retourne un ensemble de parties dont les boîtes de bordure se chevauchent sur une sphère donnée.
Retourne un ensemble de parties dont l'espace occupé est partagé avec la partie donnée.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Déplace la partie spécifiée à l'emplacement spécifié via une cinématique inversée plutôt que de la déplacer directement là-bas pour assurer que toutes les articulations, les contraintes ou les collisions auxquelles cette partie participe restent physiquement satisfaites.
Lance un rayon en utilisant une origine, une direction et un RaycastParams optionnel, puis renvoie un RaycastResult si un objet éligible ou un terrain intersecte le rayon.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Lance une forme sphérique dans une direction donnée et renvoie un RaycastResult si la forme frappe une cellule BasePart ou Terrain .
Avance la simulation pour les parties dans le monde en fonction d'une augmentation de temps spécifiée et d'un ensemble facultatif de BaseParts.
Définit ce modèle pour être persistant pour le joueur spécifié. ModelStreamingMode doit être défini sur PersistentPerPlayer pour que le comportement soit modifié en raison de l'ajout.
Renvoie une description d'un volume qui contient toutes les parties d'un modèle.
Renvoie la taille de la plus petite boîte de bordure qui contient tout le BaseParts dans le Model, alignée sur le Model.PrimaryPart si elle est définie.
Renvoie tous les objets Player que cet objet de modèle est persistant pour.Le comportement varie en fonction de si cette méthode est appelée à partir d'un Script ou d'un LocalScript .
Renvoie la taille canonique du modèle, qui est par défaut de 1 pour les modèles créés récemment et qui changera lorsqu'elle sera mise à l'échelle via Model/ScaleTo.
Déplace le PrimaryPart à la position donnée. Si aucune partie principale n'a été spécifiée, la partie racine du modèle sera utilisée.
Rend ce modèle non persistant pour le joueur spécifié.ModelStreamingMode doit être défini sur PersistentPerPlayer pour que le comportement soit modifié en raison de la suppression.
Définit le facteur d'échelle du modèle, ajustant la taille et l'emplacement de toutes les instances descendantes afin qu'elles aient ce facteur d'échelle par rapport à leurs tailles et emplacements initiaux lorsque le facteur d'échelle était de 1.
Déplace un Model par le décalage donné Vector3, en conservant l'orientation du modèle.Si un autre BasePart ou Terrain existe déjà à la nouvelle position, alors le Model couvrira cet objet.
Obtient le pivot d'un PVInstance .
Transforme le PVInstance ainsi que tous ses descendants PVInstances de sorte que le pivot est désormais situé au point spécifié CFrame.
Propriétés
Méthodes
ArePartsTouchingOthers
ArePartsTouchingOthers renvoie vrai si au moins une des parties données BasePart touche n'importe quelle autre partie.Deux parties sont considérées comme « touchantes » si elles se trouvent dans la limite de distance, overlapIgnored .
Si aucune partie n'est fournie, false est renvoyé.
Paramètres
Une liste de vérifications de parties pour voir si des parties de la liste touchent des parties non dans la liste.
La limite de chevauchement de la partie en studs qui est ignorée avant que les parties ne soient jugées comme se touchant.
Retours
Échantillons de code
Le bloc de code ci-dessous montre comment utiliser WorldRoot:ArePartsTouchingOthers() pour vérifier si les parties d'une liste touchent n'importe quelle partie de l'espace de travail non dans la liste.
Tout d'abord, le script crée deux parties carrées qui se chevauchent sur 1 écrou, Part1 et Part2.Ensuite, il imprime la valeur retournée par ArePartsTouchingOthers() lorsque Part1 est passée dans partList à trois valeurs de chevauchement différentes : 0 , 0.999 et 1 .Les deux premières fois que ArePartsTouchingOthers() est appelé, retournez false car les valeurs de chevauchement sont inférieures à la distance que Part1 et Part2 chevauchent.Le troisième appel renvoie true parce que la valeur d'intersection est égale à la distance à laquelle les parties se chevauchent.
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)) -- Vrai
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- Vrai
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
Lance une forme de bloc dans une direction donnée et renvoie la première collision avec une cellule BasePart ou Terrain .Cela est analogue à la façon dont WorldRoot:Raycast() projette un rayon linéaire dans une direction pour trouver une collision, mais il utilise une forme 3D au lieu d'un rayon.
Contrairement à WorldRoot:GetPartsInPart(), cette méthode ne détecte pas BaseParts que initialement l'intersection de la forme se produit.
Si un coup est détecté, un RaycastResult est retourné contenant les informations sur le coup.La propriété Distance représente la distance que la forme doit parcourir pour trouver un hit, et la propriété Position représente le point d'intersection qui provoque le hit.
Cette méthode lance une erreur si elle reçoit des entrées invalides CFrame , de taille ou de direction.
Paramètres
La position initiale et la rotation de la forme du bloc de distribution.
La taille du bloc de distribution en studs. La taille maximale est de 512 studs.
Direction du shapecast, avec la magnitude représentant la distance maximale que la forme peut parcourir. La distance maximale est de 1024 studs.
Retours
Échantillons de code
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
Cette fonction déplace une table de BaseParts à une table de CFrames sans nécessairement déclencher les événements de propriété par défaut Changed.Cela fournit un moyen très rapide de déplacer un grand nombre de pièces, car vous n'avez pas à payer le coût de jeux de propriétés séparés pour chaque pièce individuelle.
Le troisième argument vous permet de mieux optimiser l'opération de déplacement.Par défaut, l'événement Changed de chaque partie se déclenche pour Position , Orientation , et CFrame .Cependant, si vous spécifiez FireCFrameChanged comme troisième argument, seul l'événement Changed pour la propriété CFrame sera lancer.
Notez que vous ne devez utiliser cette fonction que si vous êtes sûr que le mouvement de partie est une bouteille à la mer dans votre code.Simplement définir la propriété CFrame des parties individuelles et des modèles soudés est suffisamment rapide dans la plupart des cas.
Paramètres
Retours
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() renvoie une série de parties dont les boîtes d'accrochage se chevauchent sur une boîte dont le volume est décrit en utilisant le centre donné ( CFrame ) et la taille ( Vector3 ).
Comme souligné, cette méthode de requête spatiale prend efficacement en compte le volume des boîtes de contour des parties plutôt que leur volume réel occupé.Cela peut être important lorsque vous envisagez des cylindres, des sphères, des unions et MeshParts qui ont des formes non-bloquées.Pour les cas où la précision est importante, utilisez WorldRoot:GetPartsInPart() à la place, ou filtrez davantage les résultats de cette méthode vous-même.
Cette méthode utilise un objet pour décrire des parties réutilisables de la recherche/requête, telles qu'une liste d'inclusion ou d'exclusion, le nombre maximum de parties à recherche/requête, le groupe de collision à utiliser et si la requête préfère la valeur de la partie interceptée sur sa valeur .
Paramètres
L'emplacement du centre du volume de boîte donné à rechercher.
La taille du volume de boîte donné à rechercher.
Contient des parties réutilisables des paramètres de requête spatiale.
Retours
Un ensemble de BaseParts qui correspondait à la recherche/requête.
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() renvoie une série de parties dont les boîtes d'accrochage se chevauchent sur une sphère dont le volume est décrit en utilisant le centre donné ( Vector3 ) et le rayon (number).
Comme souligné, cette méthode de requête spatiale prend efficacement en compte le volume des boîtes de contour des parties plutôt que leur volume réel occupé.Cela peut être important lorsque vous envisagez des cylindres, des sphères, des unions et MeshParts qui ont des formes non-bloquées.Pour les cas où la précision est importante, utilisez WorldRoot:GetPartsInPart() à la place, ou filtrez davantage les résultats de cette méthode vous-même.
Cette méthode utilise un objet pour décrire des parties réutilisables de la recherche/requête, telles qu'une liste d'inclusion ou d'exclusion, le nombre maximum de parties à recherche/requête, le groupe de collision à utiliser et si la requête préfère la valeur de la partie interceptée sur sa valeur .
Paramètres
L'emplacement du centre du volume de sphère donné à rechercher.
Le rayon du volume de sphère donné à rechercher.
Contient des parties réutilisables des paramètres de requête spatiale.
Retours
Un ensemble de BaseParts qui correspondait à la recherche/requête.
GetPartsInPart
WorldRoot:GetPartsInPart() renvoie une série de parties dont l'espace occupé est partagé avec la partie donnée (qui doit exister dans la même WorldRoot que les parties à rechercher).Cette méthode peut être utilisée à la place de BasePart:GetTouchingParts() et est généralement un meilleur choix.
Comme noté, cette méthode de requête spatiale prend en compte le volume exact occupé par la partie donnée en effectuant une vérifierde collision géométrique complète.Par exemple, une pièce concave/creuse ne correspondra pas aux parties interrogées à l'intérieur à moins qu'elles ne se chevauchent/ne touchent réellement une telle pièce.Pour les volumes plus simples, envisagez d'utiliser WorldRoot:GetPartBoundsInBox() ou WorldRoot:GetPartBoundsInRadius(), car ils sont moins précis mais fonctionnent plus efficacement.
Cette méthode utilise un objet pour décrire des parties réutilisables de la recherche/requête, telles qu'une liste d'inclusion ou d'exclusion, le nombre maximum de parties à recherche/requête, le groupe de collision à utiliser et si la requête préfère la valeur de la partie interceptée sur sa valeur .
Paramètres
La partie dont le volume doit être vérifié par rapport à d'autres parties.
Contient des parties réutilisables des paramètres de requête spatiale.
Retours
Un ensemble de BaseParts qui correspondait à la recherche/requête.
IKMoveTo
Cette fonction déplace la partie spécifiée à l'emplacement spécifié via kinématique inversée plutôt que de la déplacer directement là-bas pour assurer que toutes les articulations, constraints, ou les collisions auxquelles cette partie participe restent physiquement satisfaites.Actuellement, cette fonction n'est disponible que dans Studio à plugins , car elle est en conflit avec la physique d'un jeu en cours d'exécution.
Translatez la rigidité est un nombre entre 0 et 1 spécifiant comment agressivement associer la position de la partie à la position de la cible CFrame. Rotation de la rigidité est un nombre entre 0 et 1 précisant à quel point il est agressif de correspondre à la rotation de la pièce à la partie de rotation du CFrame cible.
Par exemple :
- Si la rigidité de traduction et la rigidité de rotation sont toutes deux égales à 1, la partie sera déplacée exactement vers le CFrame cible, indépendamment des contraintes physiques qui s'y trouvent.
- Si la rigidité de traduction et la rigidité de rotation sont toutes deux égales à 0,5, la partie essaiera de se déplacer exactement vers la cible CFrame, mais pourrait être repoussée par des contraintes physiques sur elle.
- Si la rigidité de traduction et la rigidité de rotation sont toutes deux égales à 0, la cible CFrame sera ignorée et les contraintes physiques seront résolues pour l'objet à l'endroit où il se trouvait.
Paramètres
La partie qui est déplacée.
L'emplacement pour déplacer la partie spécifiée.
Un nombre entre 0 et 1 précisant comment agressivement correspondre la position de la partie à la partie de position de la cible CFrame .
Un nombre entre 0 et 1 précisant comment agressivement correspondre la rotation de la partie à la partie de rotation de la cible CFrame .
Vous permet de spécifier quels objets devraient être affectés par la résolution physique.
Retours
Raycast
Lance un rayon en utilisant une origine, une direction et un RaycastParams optionnel.Si elle trouve une cellule éligible BasePart ou Terrain , une RaycastResult est retournée contenant les résultats de l'opération.Si aucun objet RaycastParams n'est fourni, les valeurs par défaut sont utilisées ( toutes les parties sont prises en compte et l'eau Terrain n'est pas ignorée).
Notez que la longueur (la magnitude) du vecteur directionnel est importante, car les objets/terrains plus éloignés que sa longueur ne seront pas testés.Si vous utilisez un CFrame pour aider à créer les composants de rayon, envisagez d'utiliser CFrame.LookVector comme vecteur directionnel et de le multiplier par la longueur souhaitée comme illustré dans l'exemple ci-dessous.La longueur maximale du vecteur de direction est de 15 000 studs.
Cette méthode n'utilise pas pas d'objet Ray, mais ses composants d'origine et de direction peuvent être empruntés à Ray.Origin et Ray.Direction.
Paramètres
Le point d'origine du rayon.
Le vecteur directionnel du rayon. Notez que la longueur de ce vecteur est importante, car les parties/terrains plus éloignés de sa longueur ne seront pas testés.
Un objet utilisé pour spécifier l'éligibilité au coup dans l'opération de lancer de rayons.S'il n'est pas fourni, des valeurs par défaut sont utilisées où toutes les parties sont prises en compte et l'eau Terrain est pas ignorée.
Retours
Échantillons de code
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
Paramètres
Retours
Spherecast
Lance une forme sphérique dans une direction donnée et renvoie la première collision avec une cellule BasePart ou Terrain .Cela est analogue à la façon dont WorldRoot:Raycast() projette un rayon linéaire dans une direction pour trouver une collision, mais il utilise une forme 3D au lieu d'un rayon.
Contrairement à WorldRoot:GetPartsInPart(), cette méthode ne détecte pas BaseParts que initialement l'intersection de la forme se produit.
Si un coup est détecté, un RaycastResult est retourné contenant les informations sur le coup.La propriété Distance représente la distance que la forme doit parcourir pour trouver un hit, et la propriété Position représente le point d'intersection qui provoque le hit.
Cette méthode lance une erreur si elle reçoit des entrées de rayon ou de direction non valides.
Paramètres
La position initiale de la forme sphérique de distribution.
Le rayon de la forme sphérique de distribution en studs. Le rayon maximum est de 256 studs.
Direction du shapecast, avec la magnitude représentant la distance maximale que la forme peut parcourir. La distance maximale est de 1024 studs.
Retours
Échantillons de code
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
Avance la simulation pour les parties dans le monde en fonction d'une augmentation de temps spécifiée et d'un ensemble facultatif de BasePart.Lorsqu'un ensemble de parties est spécifié, seules ces parties seront simulées et toutes les autres parties dans le monde seront traitées comme ancrées.Lorsque cet argument est omis, toutes les parties du monde seront incluses dans la simulation.L'augmentation du temps spécifiée peut être un nombre positif, avec des valeurs plus importantes qui augmentent l'exécution de la fonction.En fonction de la valeur de l'augmentation du temps, le système de physique peut le diviser en plusieurs étapes individuelles pour maintenir la précision et la stabilité de la simulation.Même si la fonction effectue plusieurs substeps, les résultats de la simulation ne seront vus qu'une fois que la fonction sera terminée.Pour visualiser les étapes individuelles d'une simulation, la fonction peut être appelée une fois par étape de rendu via l'événement RunService.RenderStepped.
Paramètres
Quantité de temps qui sera simulée. Cet argument doit être un nombre positif. Les valeurs plus importantes augmenteront l'exécution de cette fonction.
Matrice facultative de parties qui seront simulées. Ce jeu doit contenir des instances de type BasePart ; tous les autres types seront ignorés.
Retours
Échantillons de code
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)