WorldRoot

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible

Cette classe de base fournit une API pour n'importe quelle instance destinée à gérer les requêtes spatiales 3D et la simulation, telles que Workspace et WorldModel.

Résumé

Propriétés

Propriétés hérités de Model
  • Sécurité des plugins
    Lecture parallèle

    Définit le niveau de détail sur le modèle pour les expériences avec le streaming d'instance activé.

  • Contrôle le comportement de génération du modèle sur Models lorsque le mode d'instantiation est activé.

  • Lecture parallèle

    La partie principale du Model , ou nil si elle n'est pas explicitement configurer.

  • Non répliqué
    Non scriptable
    Lecture parallèle

    Propriété seulement utilisée pour escalader le modèle autour de son pivot. En configurant cette propriété, l'échelle sera déplacée comme si Model/ScaleTo était appelée dessus.

  • Non répliqué
    Lecture parallèle

    Détermine l'endroit où le pivot d'un Model qui fait ne a pas de set Model.PrimaryPart est situé.

Propriétés hérités de PVInstance

Méthodes

Méthodes hérités de Model
  • AddPersistentPlayer(playerInstance : Player):void

    Définit ce modèle pour être persistant pour le joueur spécifié. Model.ModelStreamingMode doit être défini sur PersistentPerPlayer pour que le comportement soit modifié en tant que résultat de l'ajout.

  • Retourne une description d'un volume qui contient toutes les parties d'un modèle.

  • Renvoie la taille de la plus petite boîte de définition qui contient tous les BaseParts dans le Model, avec le Model.PrimaryPart si c'est configurer.

  • Renvoie tous les objets Player que ce modèle d'objet persiste pour. Le comportement varie en fonction de si cet objet de modèle est appelé à partir d'un Script ou d'un LocalScript.

  • Renvoie l'échelle de canon du modèlisation, qui est par défaut 1 pour les nouveaux modèles créés et changera lorsqu'elle sera mise à l'échelle via Model/ScaleTo .

  • MoveTo(position : Vector3):void

    Déplace le PrimaryPart à l'endroit donné. Si une partie principale n'a pas été spécifiée, la partie racine du modèle sera utilisée.

  • RemovePersistentPlayer(playerInstance : Player):void

    Ce modèle n'est plus persistant pour le joueur spécifié. Model.ModelStreamingMode doit être réglé sur PersistentPerPlayer pour que le comportement soit modifié en tant que résultat de la suppression.

  • ScaleTo(newScaleFactor : number):void

    Définit le facteur de mise à l'échelle du modèlisation, ajustant la taille et l'emplacement de toutes les instances descendantes afin qu'elles aient ce facteur de mise à l'échelle par rapport à leurs tailles et emplacements d'origine lorsque le facteur de mise à l'échelle était 1.

  • TranslateBy(delta : Vector3):void

    Déplace un Model par l'écart donné Vector3, en conservant l'orientation du modèlisation. Si un autre BasePart ou 2>Class.Terrain2> existe déjà à la nouvelle position, le 5>Class.Model5> dépassera l'objet.

Méthodes hérités de PVInstance

Propriétés

Méthodes

ArePartsTouchingOthers

ArePartsTouchingOthers renvoie vrai si au moins un des BasePart donnés touche une autre partie. Deux parties sont considérées comme « touchant » si elles sont dans la distance seuil, overlapIgnored.

Si aucune partie n'est fournie, false est renvoyé.

Paramètres

partList: Instances

Une liste de vérifications de parties pour voir si toutes les parties de la liste touchent des parties non dans la liste.

overlapIgnored: number

La valeur seuil de l'emplacement des parties qui est ignorée avant que les parties soient considérées comme touchées.

Valeur par défaut : 0.000199999995

Retours

Vrai si et seulement si l'une des parts dans partList touche n'importe quelle autre partie (les parties ne sont pas dans la liste des parties). Faux si aucune partie n'est passée.

Échantillons de code

Checking for Touching Parts

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)) -- True
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- True
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False

Blockcast

Écrire en parallèle

Définit une forme de bloc dans une direction donnée et renvoie la première collision avec un BasePart ou Terrain cellule. Ceci est similaire à la façon dont WorldRoot:Raycast() cast 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 qui initialement intersecte la forme.

Si un hit est détecté, un RaycastResult est renvoyé contenant les informations sur le hit. La propriété Distance représente la distance que le forme doit parcourir pour trouver un hit, et la propriété Position représente le point d'intersection qui cause le hit.

Cette méthode lance une erreur si elle est passée invalide CFrame, la taille ou les entrées de direction.

Paramètres

cframe: CFrame

La position initiale et la rotation de la forme du bloc de cast.

size: Vector3

La taille du bloc de cast dans les studs. La taille maximale est 512 studs.

direction: Vector3

Direction du shapecast, avec la magnitude représentant la distance maximale que le forme peut parcourir. La distance maximale est de 1024 studs.

Valeur par défaut : "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Retours

Contient le résultat de l'opération de shapecast, ou nil s'il n'y a pas de BasePart ou Terrain cellule frappée.

Échantillons de code

Blockcasting

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

void

Cette fonction déplace une table de BaseParts à une table de CFrames sans nécessairement lancer les événements de propriété par défaut Changed. Cela fournit un moyen très rapide de déplacer de grandes quantités de parties, car vous n'avez pas à payer le coût des ensembles de propriété séparés pour chaque partie individuelle.

Le troisième argument vous permet d'optimiser davantage l'opération de déplacement. Par défaut, l'événement Changed de chaque partie se

Notez que vous ne devriez utiliser cette fonction que si vous êtes sûr que le mouvement de partie est un bottleneck dans votre code. En simplement設置 le CFrame propriété de chaque partie et modèles soudeur, est assez rapide dans la plupart des cas.

Paramètres

partList: Instances
cframeList: Array
Valeur par défaut : "FireAllEvents"

Retours

void

GetPartBoundsInBox

Instances
Écrire en parallèle

WorldRoot:GetPartBoundsInBox() renvoie un tableau de parties dont les limites de boîte se chevauchent sur une boîte dont le volume est décrit à l'aide du centre ( CFrame ) et de la taille ( 0> Datatype.Vector30> ).

Comme souligné, cette méthode de requête spatiale prend en compte efficacement le volume des parties' boîtes de délimitation plutôt que leur volume occupé réel. Ceci peut être important lorsque vous considérez 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() au lieu

Cette méthode utilise un objet OverlapParams pour décrire les parties réutilisables de la recherche/requêtespatiale, telles qu'une liste d'inclusion ou d'exclusion, le nombre maximum de parties à requérir et le fait que la requête préfère la valeur Class.BasePart.CanCollide de sa valeur BasePart.CanCollide.

Paramètres

cframe: CFrame

Le lieu du centre du volume de la boîte donné à être requis.

size: Vector3

La taille du volume de la boîte donné à rechercher.

overlapParams: OverlapParams

Contient des parties réutilisables des paramètres de requête spatiale.

Valeur par défaut : "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Retours

Instances

Un tableau de BaseParts qui correspondait à la recherche/requête.

GetPartBoundsInRadius

Instances
Écrire en parallèle

WorldRoot:GetPartBoundsInRadius() renvoie un tableau de parties dont les boîtes de délimitation 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 en compte efficacement le volume des parties' boîtes de délimitation plutôt que leur volume occupé réel. Ceci peut être important lorsque vous considérez 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() au lieu

Cette méthode utilise un objet OverlapParams pour décrire les parties réutilisables de la recherche/requêtespatiale, telles qu'une liste d'inclusion ou d'exclusion, le nombre maximum de parties à requérir et le fait que la requête préfère la valeur Class.BasePart.CanCollide de sa valeur BasePart.CanCollide.

Paramètres

position: Vector3

Le lieu du centre du volume de la sphère donné à rechercher.

radius: number

Le rayon du volume de la sphère donné à rechercher.

overlapParams: OverlapParams

Contient des parties réutilisables des paramètres de requête spatiale.

Valeur par défaut : "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Retours

Instances

Un tableau de BaseParts qui correspondait à la recherche/requête.

GetPartsInPart

Instances
Écrire en parallèle

WorldRoot:GetPartsInPart() renvoie un tableau de pièces dont l'espace occupé est partagé avec la pièce donnée (qui doit exister dans le même WorldRoot que les pièces à 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 utilisant un vérifierde collision géométrique complet. Par exemple, une partie concave/hollow ne correspond pas aux parties requises à l'intérieur s'il n'y a pas de point d'intersection/de contact dans la partie. Pour les volumes plus simples, considérez l'utilisation de Class.WorldRoot

Cette méthode utilise un objet OverlapParams pour décrire les parties réutilisables de la recherche/requêtespatiale, telles qu'une liste d'inclusion ou d'exclusion, le nombre maximum de parties à requérir et le fait que la requête préfère la valeur Class.BasePart.CanCollide de sa valeur BasePart.CanCollide.

Paramètres

part: BasePart

La partie dont le volume est à vérifier par rapport aux autres parties.

overlapParams: OverlapParams

Contient des parties réutilisables des paramètres de requête spatiale.

Valeur par défaut : "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Retours

Instances

Un tableau de BaseParts qui correspondait à la recherche/requête.

IKMoveTo

void
Sécurité des plugins

Cette fonction déplace la partie spécifiée à l'emplacement spécifié via kinétique inverse plutôt que de le déplacer directement, afin de garantir que les jointures, constraints ou les collisions que la partie participe à restent physiquement satisfaites. Actuellement, cette fonction n'est disponible que dans Studio pour plugins, car elle implique actuellement la physique d'un jeu en cours.

Traduire la souplesse est un nombre entre 0 et 1 spécifiant à quel point la position de la partie est correspondante à la position de la cible CFrame. Tourner la souplesse est un nombre entre 0 et 1 spécifiant à quel point la rotation de la partie est correspondante à la rotation part de la cible CFrame.

Par exemple :

  • Si la souplesse de traduction et la souplesse de rotation sont toutes deux égales à 1, la partie sera déplacée exactement à la cible CFrame indépendamment des contraintes physiques qui s'y trouvent.
  • Si la souplesse de traduction et la souplesse de rotation sont toutes deux égales à 0,5, la partie essaie de se déplacer exactement vers la cible CFrame, mais peut être déplacée en dehors du chemin par des contraintes physiques dessus.
  • Si la souplesse de traduction et la souplesse de rotation sont toutes deux égales à 0, la cible CFrame sera ignorée et les contraintes physiques seront résolues pour l'objet à la position où il se trouve.

Paramètres

part: BasePart

La partie qui est en train d'être déplacée.

target: CFrame

La position à laquelle déplacer la partie spécifiée.

translateStiffness: number

Un nombre entre 0 et 1 spécifiant à quel point il est agressif de correspondre à la position de la partie à la partie de la cible CFrame .

Valeur par défaut : 0.5
rotateStiffness: number

Un nombre entre 0 et 1 spécifiant à quel point il est agressif de correspondre à la rotation de la partie à la partie de rotation de la cible CFrame .

Valeur par défaut : 0.5
collisionsMode: Enum.IKCollisionsMode

Vous permet de spécifier les objets qui devraient être affectés par la résolution physique.

Valeur par défaut : "OtherMechanismsAnchored"

Retours

void
Écrire en parallèle

Lance une rayon à l'aide d'une origine, d'une direction et d'un RaycastParams . Si elle trouve un élément éligible BasePart ou Terrain, un 2> Datatype

Notez que la longueur (magnitude) du vécteur directionnel est importante, car les objets/terrain plus loin que sa longueur ne seront pas testés. Si vous utilisez un CFrame pour aider à créer les composants de rayon, considérez l'utilisation de CFrame.LookVector comme le vécteur directionnel et multipliez

Cette méthode ne utilise pas d'objet Ray, mais ses composantes d'origine et de direction peuvent être empruntées à partir de Ray.Origin et 2>Datatype.Ray.Direction2>.

Paramètres

origin: Vector3

Point d'origine du rayon.

direction: Vector3

Le vécteur directionnel du rayon. Remarquez que la longueur de ce vécteur importe, car la longueur des parties/terrain plus loin que sa longueur ne sera pas testée.

raycastParams: RaycastParams

Un objet utilisé pour spécifier la faisabilité des coups dans l'opération de raycast. S'il n'est pas fourni, les valeurs par défaut sont utilisées où toutes les parties sont considérées et Terrain l'eau n'est pas ignorée.

Valeur par défaut : "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Retours

Contient les résultats d'une opération de raycast, ou nil si aucune cellule éligible BasePart ou Terrain n'a été touchée.

Échantillons de code

Raycasting

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

part: BasePart
direction: Vector3
Valeur par défaut : "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Retours

Spherecast

Écrire en parallèle

Lance une forme sphérique dans une direction donnée et renvoie la première collision avec un BasePart ou Terrain cellule. Ceci est similaire à la façon dont WorldRoot:Raycast() lance 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 qui initialement intersecte la forme.

Si un hit est détecté, un RaycastResult est renvoyé contenant les informations sur le hit. La propriété Distance représente la distance que le forme doit parcourir pour trouver un hit, et la propriété Position représente le point d'intersection qui cause le hit.

Cette méthode lance une erreur si elle reçoit des entrées de rayon ou de direction invalides.

Paramètres

position: Vector3

La position initiale de la forme sphérique de cast.

radius: number

Le rayon de la forme sphérique de couleur dans les studs. Le rayon maximum est de 256 studs.

direction: Vector3

Direction du shapecast, avec la magnitude représentant la distance maximale que le forme peut parcourir. La distance maximale est de 1024 studs.

Valeur par défaut : "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Retours

Contient le résultat de l'opération de shapecast, ou nil s'il n'y a pas de BasePart ou Terrain cellule frappée.

Échantillons de code

Spherecasting

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

void
Sécurité des plugins

Avance la simulation pour les parties dans le monde en fonction d'un augmentation de temps spécifiée et d'un ensemble facultat

Paramètres

dt: number

La durée de simulation qui sera simulée. Ce paramètre doit être un nombre positif. Les valeurs plus grandes augmenteront l'exécution de cette fonction.

parts: Instances

Niveau d'arrêt facultatif de parties qui sera simulé. Ce ensemble doit contenir des instances de type BasePart ; tout autre type sera ignoré.

Valeur par défaut : "{}"

Retours

void

Échantillons de code

StepPhysics

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)

Évènements