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 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 ModelDé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é.
La partie principale du Model , ou nil si elle n'est pas explicitement configurer.
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.
Détermine l'endroit où le pivot d'un Model qui fait ne a pas de set Model.PrimaryPart est situé.
Méthodes
Retourne vrai si l'un des BasePart est en train de toucher n'importe quelle autre partie.
Définit une forme de bloc dans une direction donnée et renvoie un RaycastResult si la forme touche une cellule BasePart ou Terrain.
Renvoie un tableau de parties dont les bordures se chevauchent sur une donnée de boîte de modélisation.
Renvoie un tableau de parties dont les bordures se chevauchent sur une sphère donnée.
Renvoie un tableau 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):void
Déplace la partie spécifiée vers l'emplacement spécifié via la kinésie inverse plutôt que de la déplacer directement, afin de garantir que les jointures, les contraintes ou les collisions que la partie participante est en train de participer sont physiquement satisfaites.
Lance une fusée en utilisant une origine, une direction et un RaycastParams, puis renvoie un RaycastResult si un objet ou un terrain éligible intercepte la fusée.
- 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 touche une cellule BasePart ou Terrain.
Avance la simulation pour les parties dans le monde en fonction d'un 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é. 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 .
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.
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.
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.
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.
Obtient le pivot d'un PVInstance.
Transforme le PVInstance ainsi que tous ses descendants PVInstances afin que le pivot soit maintenant situé dans le CFrame spécifié.
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
Une liste de vérifications de parties pour voir si toutes les parties de la liste touchent des parties non dans la liste.
La valeur seuil de l'emplacement des parties qui est ignorée avant que les parties soient considérées comme touchées.
Retours
Échantillons de code
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
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
La position initiale et la rotation de la forme du bloc de cast.
La taille du bloc de cast dans les studs. La taille maximale est 512 studs.
Direction du shapecast, avec la magnitude représentant la distance maximale que le forme peut parcourir. La distance maximale est de 1024 studs.
Retours
Échantillons de code
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 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
Retours
GetPartBoundsInBox
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
Le lieu du centre du volume de la boîte donné à être requis.
La taille du volume de la boîte donné à rechercher.
Contient des parties réutilisables des paramètres de requête spatiale.
Retours
Un tableau de BaseParts qui correspondait à la recherche/requête.
GetPartBoundsInRadius
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
Le lieu du centre du volume de la sphère donné à rechercher.
Le rayon du volume de la sphère donné à rechercher.
Contient des parties réutilisables des paramètres de requête spatiale.
Retours
Un tableau de BaseParts qui correspondait à la recherche/requête.
GetPartsInPart
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
La partie dont le volume est à vérifier par rapport aux autres parties.
Contient des parties réutilisables des paramètres de requête spatiale.
Retours
Un tableau de BaseParts qui correspondait à la recherche/requête.
IKMoveTo
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
La partie qui est en train d'être déplacée.
La position à laquelle déplacer la partie spécifiée.
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 .
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 .
Vous permet de spécifier les objets qui devraient être affectés par la résolution physique.
Retours
Raycast
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
Point d'origine du rayon.
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.
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.
Retours
Échantillons de code
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 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
La position initiale de la forme sphérique de cast.
Le rayon de la forme sphérique de couleur dans les studs. Le rayon maximum est de 256 studs.
Direction du shapecast, avec la magnitude représentant la distance maximale que le forme peut parcourir. La distance maximale est de 1024 studs.
Retours
Échantillons de code
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'un augmentation de temps spécifiée et d'un ensemble facultat
Paramètres
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.
Niveau d'arrêt facultatif de parties qui sera simulé. Ce ensemble doit contenir des instances de type BasePart ; tout autre type sera ignoré.
Retours
Échantillons de code
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)