Terrain

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

Le terrain vous permet de créer des environnements dynamiquement morphables avec peu ou pas de décalage.Il est actuellement basé sur une grille 4×4×4 de cellules, où chaque cellule a un nombre entre 0 et 1 représentant la quantité de géométrie qui devrait occuper la cellule et le matériau de la cellule.L'occupation détermine comment la cellule se transformera avec les cellules environnantes, et le résultat est l'illusion d'avoir aucune contrainte de grille.

Pour plus d'informations, voir terrain.

Résumé

Propriétés

  • Non scriptable
    Lecture parallèle

    Active ou désactive la décoration du terrain.

  • Non scriptable
    Lecture parallèle

    Spécifie la longueur de la pelouse animée.

  • MaterialColors:BinaryString
    Non scriptable
    Lecture parallèle

    MaterialColors représente l'éditeur pour la fonctionnalité Couleur du matériau, et ne peut pas être modifié par des scripts .

    Pour obtenir la couleur d'un matériau, utilisez : Terrain:GetMaterialColor() Pour définir la couleur d'un matériau, utilisez : Terrain:SetMaterialColor()

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

    Affiche les limites de la plus grande région éditable possible.

  • Lecture parallèle

    La teinte de l'eau du terrain.

  • Lecture parallèle

    Contrôle la manière dont les réflexions d'eau du terrain sont opaques.

  • Lecture parallèle

    La transparence de l'eau du terrain.

  • Lecture parallèle

    Définit la hauteur maximale des vagues d'eau du terrain en studs.

  • Lecture parallèle

    Définit le nombre de fois que les vagues d'eau du terrain se déplaceront vers le haut et vers le bas par minute.

Propriétés hérités de BasePart
  • Lecture parallèle

    Détermine si une partie est immobile par la physique.

  • Non répliqué
    Lecture parallèle

    La vitesse angulaire de l'assemblage de la pièce.

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

    Le centre de masse de l'assemblage de la partie dans l'espace mondial.

  • Non répliqué
    Lecture parallèle

    La vitesse linéaire de l'assemblage de la pièce.

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

    La masse totale de l'assemblage de la partie.

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

    Une référence à la partie racine de l'assemblage.

  • Lecture parallèle

    Détermine si la partie interagira physiquement avec la simulation audio, similaire à CastShadow pour l'éclairage.

  • Lecture parallèle

    Détermine le type de surface pour le dos d'une pièce.

  • Détermine le type de surface pour le côté inférieur d'une pièce.

  • Non répliqué
    Lecture parallèle

    Détermine la couleur d'une partie.

  • Lecture parallèle

    Détermine la position et l'orientation du BasePart dans le monde.

  • Lecture parallèle

    Détermine si une partie peut entrer en collision avec d'autres parties.

  • Lecture parallèle

    Détermine si la partie est prise en compte lors des opérations de requête spatiale.

  • Lecture parallèle

    Détermine si Touched et TouchEnded événements se déclenhent sur la partie.

  • Lecture parallèle

    Détermine si oui ou non une partie lance une ombre.

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

    Décrit la position mondiale dans laquelle le centre de masse d'une partie est situé.

  • Non répliqué
    Lecture parallèle

    Détermine le nom du groupe de collision d'une partie.

  • Non répliqué
    Lecture parallèle

    Détermine la couleur d'une partie.

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

    Indique les propriétés physiques actuelles de la pièce.

  • Détermine plusieurs propriétés physiques d'une partie.

  • Lecture parallèle

    Utilisé pour activer ou désactiver les forces aérodynamiques sur les parties et les assemblages.

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

    Le CFrame de l'extensibilité physique du BasePart.

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

    La taille physique réelle du BasePart telle que perçue par le moteur de physique.

  • Lecture parallèle

    Détermine le type de surface pour le visage avant d'une partie.

  • Lecture parallèle

    Détermine le type de surface pour le côté gauche d'une pièce.

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

    Détermine un multiplicateur pour BasePart.Transparency qui n'est visible que pour le client local.

  • Lecture parallèle

    Détermine si une partie est sélectionnable dans Studio.

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

    Décrit la masse de la partie, le produit de sa densité et de son volume.

  • Lecture parallèle

    Détermine si la partie contribue à la masse totale ou à l'inertie de son corps rigide.

  • Lecture parallèle

    Détermine la texture et les propriétés physiques par défaut d'une pièce.

  • Non répliqué
    Lecture parallèle

    Le nom de MaterialVariant.

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

    Décrit la rotation de la partie dans le monde.

  • Lecture parallèle

    Spécifie le décalage du pivot de la partie par rapport à son CFrame .

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

    Décrit la position de la partie dans le monde.

  • Caché
    Lecture uniquement
    Non répliqué
    Lecture parallèle

    Temps écoulé depuis la dernière mise à jour physique enregistrée.

  • Lecture parallèle

    Détermine à quel point une partie reflète la skybox.

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

    Décrit le plus petit changement de taille autorisé par la méthode Resize().

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

    Décrit les visages sur lesquels une partie peut être redimensionnée.

  • Lecture parallèle

    Détermine le type de surface pour le côté droit d'une pièce.

  • Lecture parallèle

    La règle principale pour déterminer la partie racine d'une assemblée.

  • Non répliqué
    Lecture parallèle

    La rotation de la pièce en degrés pour les trois axes.

  • Non répliqué
    Lecture parallèle

    Détermine les dimensions d'une pièce (longueur, largeur, hauteur).

  • Lecture parallèle

    Détermine le type de surface pour le haut du visage d'une pièce.

  • Lecture parallèle

    Détermine à quel point une partie peut être vue à travers (l'inverse de l'opacité de la partie).

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

Méthodes

Méthodes hérités de BasePartMéthodes hérités de PVInstance

Évènements

Évènements hérités de BasePart

Propriétés

Decoration

Non scriptable
Lecture parallèle

Active ou désactive actuellement l'herbe animée sur le matériau du terrain herbe , bien que les modifications futures de cette propriété puissent contrôler des caractéristiques décoratives supplémentaires.

GrassLength

Non scriptable
Lecture parallèle

Spécifie la longueur de l'herbe animée sur le matériau du terrain Gazon , en supposant que Decoration est activé. Les valeurs valides se situent entre 0.1 et 1.

MaterialColors

BinaryString
Non scriptable
Lecture parallèle

MaterialColors représente l'éditeur pour la fonctionnalité Couleur du matériau, et ne peut pas être modifié par des scripts .

Pour obtenir la couleur d'un matériau, utilisez : Terrain:GetMaterialColor()

Pour définir la couleur d'un matériau, utilisez : Terrain:SetMaterialColor()

MaxExtents

Lecture uniquement
Non répliqué
Lecture parallèle

Affiche les limites de la plus grande région éditable possible.

WaterColor

Lecture parallèle

La teinte de l'eau du terrain.

WaterReflectance

Lecture parallèle

Contrôle la manière dont les réflexions d'eau du terrain sont opaques.

WaterTransparency

Lecture parallèle

La transparence de l'eau du terrain.

WaterWaveSize

Lecture parallèle

Définit la hauteur maximale des vagues d'eau du terrain en studs. Cela est actuellement limité entre 0 et 1.

WaterWaveSpeed

Lecture parallèle

Définit le nombre de fois que les vagues d'eau du terrain se déplaceront vers le haut et vers le bas par minute. Cela est actuellement limité entre 0 et 100.

Méthodes

CellCenterToWorld

Renvoie la position mondiale du centre de la cellule du terrain (x, y, z).

Paramètres

Valeur par défaut : ""
Valeur par défaut : ""
Valeur par défaut : ""

Retours

CellCornerToWorld

Renvoie la position du coin inférieur gauche avant de la cellule de grille (x, y, z).

Paramètres

Valeur par défaut : ""
Valeur par défaut : ""
Valeur par défaut : ""

Retours

Clear

()

Dégage le terrain.


Retours

()

ClearVoxelsAsync_beta

()

Paramètres

region: Region3
Valeur par défaut : ""
channelIds: Array
Valeur par défaut : ""

Retours

()

CopyRegion

Stocke un morceau de terrain dans un objet TerrainRegion pour qu'il puisse être récupéré plus tard.Remarque : TerrainRegion les données ne se répliquent pas entre le serveur et le client.

Paramètres

region: Region3int16
Valeur par défaut : ""

Retours

Échantillons de code

The following code will copy the whole Terrain and clear it. After 5 seconds it will paste the terrain back.

Terrain:CopyRegion

local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)

CountCells

Renvoie le nombre de cellules non vides dans le Terrain.


Retours

FillBall

()

Remplit une balle de terrain lisse dans un espace donné.

Paramètres

center: Vector3

La position du centre de la balle du terrain.

Valeur par défaut : ""
radius: number

Le rayon en studs de la balle de terrain.

Valeur par défaut : ""
material: Enum.Material

Le Enum.Material de la balle du terrain.

Valeur par défaut : ""

Retours

()

Échantillons de code

Terrain:FillBall() creates a ball of terrain given a center position, ball radius, and terrain materials.

Filling a Ball of Terrain

local Workspace = game:GetService("Workspace")
-- Creates a ball of grass at (0,0,-10) with a radius of 10 studs
Workspace.Terrain:FillBall(Vector3.new(0, 0, -10), 10, Enum.Material.Grass)

FillBlock

()

Remplit un bloc de terrain lisse avec une localisation, une rotation, une taille et un matériau donnés.

Paramètres

cframe: CFrame

La position et l'orientation du bloc de terrain.

Valeur par défaut : ""
size: Vector3

La taille en studs du bloc carré - à la fois la hauteur et la largeur.

Valeur par défaut : ""
material: Enum.Material

Le Enum.Material du bloc de terrain.

Valeur par défaut : ""

Retours

()

FillCylinder

()

Remplit un cylindre de terrain lisse dans un espace donné. L'espace est défini en utilisant un CFrame, une hauteur et un rayon.


local Workspace = game:GetService("Workspace")
Workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)

Paramètres

cframe: CFrame

La position et l'orientation du cylindre du terrain.

Valeur par défaut : ""
height: number

La hauteur en studs du cylindre du terrain.

Valeur par défaut : ""
radius: number

Le rayon en studs du cylindre du terrain.

Valeur par défaut : ""
material: Enum.Material

Le Enum.Material du cylindre du terrain.

Valeur par défaut : ""

Retours

()

FillRegion

()

Remplit un espace Region3 avec un terrain lisse.

Paramètres

region: Region3
Valeur par défaut : ""
resolution: number
Valeur par défaut : ""
material: Enum.Material
Valeur par défaut : ""

Retours

()

FillWedge

()

remplit un volume en forme de coin de avec le donné et la taille de la zone.L'orientation du coin est la même qu'une équivalente WedgePart .

Paramètres

cframe: CFrame

La position et l'orientation de la cale à remplir.

Valeur par défaut : ""
size: Vector3

La taille du coin à remplir.

Valeur par défaut : ""
material: Enum.Material

Le matériau avec lequel la cale sera remplie.

Valeur par défaut : ""

Retours

()

GetMaterialColor

Écrire en parallèle

Renvoie la couleur du matériau du terrain actuel pour le matériau de terrain spécifié.

Paramètres

material: Enum.Material
Valeur par défaut : ""

Retours

IterateVoxelsAsync_beta

Paramètres

region: Region3
Valeur par défaut : ""
resolution: number
Valeur par défaut : ""
channelIds: Array
Valeur par défaut : ""

Retours

ModifyVoxelsAsync_beta

Paramètres

region: Region3
Valeur par défaut : ""
resolution: number
Valeur par défaut : ""
channelIds: Array
Valeur par défaut : ""

Retours

PasteRegion

()

Applique un morceau de terrain à l'objet Terrain. Note : TerrainRegion les données ne se répliquent pas entre le serveur et le client.

Paramètres

Valeur par défaut : ""
corner: Vector3int16
Valeur par défaut : ""
pasteEmptyCells: boolean
Valeur par défaut : ""

Retours

()

Échantillons de code

Creates some terrain, copies it, then pastes it using the following API:

Create, Copy and Paste Terrain

--[[
Note: The use of int16 variants for these API is the result of legacy code.
The underlying voxel grid system uses Vector3int32 (Vector3).
]]
local Workspace = game:GetService("Workspace")
local Terrain = Workspace.Terrain
-- Create a simple terrain region (a 10x10x10 block of grass)
local initialRegion = Region3.new(Vector3.zero, Vector3.one * 10)
Terrain:FillRegion(initialRegion, 4, Enum.Material.Grass)
-- Copy the region using Terrain:CopyRegion
local copyRegion = Region3int16.new(Vector3int16.new(0, 0, 0), Vector3int16.new(10, 10, 10))
local copiedRegion = Terrain:CopyRegion(copyRegion)
-- Define where to paste the region (in this example, offsetting by 5 studs on the X-axis)
local newRegionCorner = Vector3int16.new(5, 0, 0)
-- Paste the region using Terrain:PasteRegion
Terrain:PasteRegion(copiedRegion, newRegionCorner, true)

ReadVoxelChannels

Écrire en parallèle

Renvoie une région de données de terrain en voxel dans un format de table en fonction des noms des canaux.

Paramètres

region: Region3

Région cible à lire. Doit être alignée sur la grille voxel. Lancera une erreur si la région est trop grande ; la limite est actuellement de 4194304 voxels³.

Valeur par défaut : ""
resolution: number

Résolution de voxel. Doit être 4.

Valeur par défaut : ""
channelIds: Array

Liste d'ID de canal (chaînes) qui doivent être accessibles aux données du voxel.Chaque ID de canal représente un type de données qui est stocké dans le voxel.Les IDs actuellement pris en charge sont {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"}.

Valeur par défaut : ""

Retours

Retourne les données de voxel en tant que dictionnaire basé sur l'entrée channelIds. Les clés représentent chaque ID de canal avec leur valeur respective en tant qu'ensemble de données 3D.

  • SolidMaterial — Le matériau Enum.Material du voxel.Notez que Water n'est plus pris en charge ; à la place, un voxel contenant de l'eau aura une valeur de LiquidOccupancy .
  • SolidOccupancy — L'occupation du matériau du voxel comme spécifié dans le canal SolidMaterial. Il s'agit d'une valeur entre 0 (vide) et 1 (complet).
  • LiquidOccupancy — Spécifie l'occupation du matériau Water en voxel en tant que valeur entre 0 (pas d'eau) et 1 (plein d'eau).Si le SolidOccupancy est 1 et que le SolidMaterial n'est pas Air, cela sera 0.

Le dictionnaire contient également une clé Size avec une valeur représentant la taille de l'arrêt 3D de chaque donnée de canal.

Échantillons de code

Terrain : ReadVoxelChannels()

local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local function printRegion(terrain, region)
local channelOutput = terrain:ReadVoxelChannels(region, 4, { "SolidOccupancy", "SolidMaterial", "LiquidOccupancy" })
local size = channelOutput.Size
for x = 1, size.X do
for y = 1, size.Y do
for z = 1, size.Z do
print(
("(%2i, %2i, %2i): %.2f %s %.2f"):format(
x,
y,
z,
channelOutput.SolidOccupancy[x][y][z],
channelOutput.SolidMaterial[x][y][z].Name,
channelOutput.LiquidOccupancy[x][y][z]
)
)
end
end
end
end
local region = Region3.new(REGION_START, REGION_END)
printRegion(workspace.Terrain, region)

ReadVoxels

Écrire en parallèle

Renvoie une certaine région de terrain lisse au format de table.

Paramètres

region: Region3

Région cible à lire. Doit être alignée sur la grille voxel. Lance une erreur si la région est trop grande. La limite est actuellement de 4194304 voxels^3.

Valeur par défaut : ""
resolution: number

Résolution de voxel. Doit être 4.

Valeur par défaut : ""

Retours

Retourne des données voxelles brutes en tant que deux tableaux 3D.

  • materials - 3D tableau de Enum.Material de la zone cible. Contient également un champ de taille, égal aux dimensions des tableaux imbriqués.
  • occupancies - 3D tableau de valeurs d'occupation de la zone cible. Contient également un champ de taille, égal aux dimensions des tableaux imbriqués.

Échantillons de code

Terrain:ReadVoxels() Code Example

local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local function printRegion(terrain, region)
local materials, occupancies = terrain:ReadVoxels(region, 4)
local size = materials.Size -- Same as occupancies.Size
for x = 1, size.X, 1 do
for y = 1, size.Y, 1 do
for z = 1, size.Z, 1 do
print(("(%2i, %2i, %2i): %.2f %s"):format(x, y, z, occupancies[x][y][z], materials[x][y][z].Name))
end
end
end
end
local region = Region3.new(REGION_START, REGION_END)
printRegion(workspace.Terrain, region)

ReadVoxelsAsync_beta

Paramètres

region: Region3
Valeur par défaut : ""
resolution: number
Valeur par défaut : ""
channelIds: Array
Valeur par défaut : ""

Retours

ReplaceMaterial

()

ReplaceMaterial remplace le terrain d'un certain Enum.Material dans un Region3 avec un autre matériau.Fondamentalement, c'est une opération de recherche et de remplacement sur les matériaux Terrain .

Contrôles

Lors de l'appel de cette méthode, le paramètre resolution doit être exactement 4.En outre, la région 3 doit être alignée sur la grille de matériaux du terrain, c'est-à-direles composants des points minimum et maximum de la région 3 doivent être divisibles par 4.Utilisez Region3:ExpandToGrid() pour rendre une région compatible avec cette fonction.

Paramètres

region: Region3

La région dans laquelle l'opération de remplacement se produira.

Valeur par défaut : ""
resolution: number

La résolution à laquelle l'opération de remplacement aura lieu ; en ce moment, cela doit être exactement 4.

Valeur par défaut : ""
sourceMaterial: Enum.Material

Le matériel ancien qui sera remplacé.

Valeur par défaut : ""
targetMaterial: Enum.Material

Le nouveau matériel.

Valeur par défaut : ""

Retours

()

Échantillons de code

This code sample demonstrates the usage of Terrain:ReplaceMaterial() by replacing grass near the game origin with asphalt. It does this by constructing a Region3 using two Vector3s.

Terrain:ReplaceMaterial

local Workspace = game:GetService("Workspace")
local terrain = Workspace.Terrain
local region = Region3.new(Vector3.new(-20, -20, -20), Vector3.new(20, 20, 20))
local resolution = 4
local materialToReplace = Enum.Material.Grass
local replacementMaterial = Enum.Material.Asphalt
terrain:ReplaceMaterial(region, resolution, materialToReplace, replacementMaterial)

SetMaterialColor

()

Définit la couleur du matériau du terrain actuel pour le matériau de terrain spécifié. Le matériau du terrain déplacera sa couleur de base vers la couleur spécifiée.

Paramètres

material: Enum.Material
Valeur par défaut : ""
value: Color3
Valeur par défaut : ""

Retours

()

WorldToCell

Renvoie l'emplacement de la cellule de grille qui contient la position du point position .

Paramètres

position: Vector3
Valeur par défaut : ""

Retours

WorldToCellPreferEmpty

Renvoie l'emplacement de la cellule de grille qui contient la position du point, en préférant les cellules de grille vides lorsque la position est sur un bord de grille.

Paramètres

position: Vector3
Valeur par défaut : ""

Retours

WorldToCellPreferSolid

Renvoie l'emplacement de la cellule de grille qui contient la position du point, en préférant les cellules de grille non vides lorsque la position est sur un bord de grille.

Paramètres

position: Vector3
Valeur par défaut : ""

Retours

WriteVoxelChannels

()

Définit une région de terrain en utilisant un dictionnaire de données de canal de voxel.

Paramètres

region: Region3

Région cible à écrire. Doit être alignée sur la grille voxel. Lance une erreur si la région est trop grande ; la limite est actuellement de 4194304 voxels³.

Valeur par défaut : ""
resolution: number

Résolution de voxel. Doit être 4.

Valeur par défaut : ""
channels: Dictionary

Dictionnaire de données de voxel similaire à la valeur de retour de ReadVoxelChannels() .Les clés représentent chaque ID de canal avec leur valeur respective en tant qu'array de données 3D.Le dictionnaire peut prendre en charge une ou plusieurs entrées de canal.

  • SolidMaterial — Le matériau Enum.Material du voxel.Notez que Water n'est plus pris en charge ; à la place, un voxel qui ne contient que de l'eau doit être entré comme SolidMaterial = Enum.Material.Air, LiquidOccupancy = x, où x est un nombre entre 0 (exclusif) et 1 (inclusif).
  • SolidOccupancy — L'occupation du matériau du voxel comme spécifié dans le canal SolidMaterial. Ce devrait être une valeur entre 0 (vide) et 1 (complet).
  • LiquidOccupancy — Spécifie l'occupation du matériau Water en voxel en tant que valeur entre 0 (pas d'eau) et 1 (plein d'eau).Si le SolidOccupancy est 1 et que le SolidMaterial n'est pas Air, cela sera 0.
Valeur par défaut : ""

Retours

()

Échantillons de code

Terrain:WriteVoxelChannels()

local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(64, 32, 64))
local RESOLUTION = 4
local OCC_EPSILON = 1 / 256
local function generateRandomTerrainInRegion(regionInput)
local region = regionInput:ExpandToGrid(4)
local size = region.Size / 4
local solidMaterials = {}
local solidOccupancies = {}
local waterOcc = {}
for x = 1, size.X do
table.insert(solidMaterials, {})
table.insert(solidOccupancies, {})
table.insert(waterOcc, {})
for y = 1, size.Y do
table.insert(solidMaterials[x], {})
table.insert(solidOccupancies[x], {})
table.insert(waterOcc[x], {})
for z = 1, size.Z do
local mat = if math.random() < 0.5 then Enum.Material.Air else Enum.Material.Sand
local occ = 0
local water = math.random()
if mat == Enum.Material.Sand then
occ = math.random() / 2 + 0.5
if occ > 1 - OCC_EPSILON then
water = 0 -- Solids cannot contain water
end
else
occ = 0
end
table.insert(solidMaterials[x][y], mat)
table.insert(solidOccupancies[x][y], occ)
table.insert(waterOcc[x][y], water)
end
end
end
return { SolidMaterial = solidMaterials, SolidOccupancy = solidOccupancies, LiquidOccupancy = waterOcc }
end
local regionContent = generateRandomTerrainInRegion(region)
workspace.Terrain:WriteVoxelChannels(region, 4, regionContent)

WriteVoxels

()

Définit une certaine région de terrain lisse en utilisant le format de table.

Paramètres

region: Region3

Région cible à écrire. Doit être alignée sur la grille voxel. Lancera une erreur si la région est trop grande.

Valeur par défaut : ""
resolution: number

Résolution de voxel. Doit être 4.

Valeur par défaut : ""
materials: Array

Matrice 3D d'Enum.Material. Les dimensions doivent correspondre exactement à la taille de la région cible en voxels.

Valeur par défaut : ""
occupancy: Array

Matrice 3D d'occupations de voxel (number entre 0 et 1). Les dimensions doivent correspondre exactement à la taille de la région cible en voxels.

Valeur par défaut : ""

Retours

()

Échantillons de code

Exemple

Exemple

local Workspace = game:GetService("Workspace")
local terrain = Workspace.Terrain
local resolution = 4
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(16, 28, 20)):ExpandToGrid(resolution)
local materials = {
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.Sand,
Enum.Material.Sand,
Enum.Material.Sand,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air },
},
}
local occupancies = {
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 0.5, 0.5, 0.5, 0.5 },
{ 0, 0, 0, 0, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 1, 1, 1, 0.5 },
{ 0, 1, 1, 1, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 1, 1, 1, 0.5 },
{ 0, 1, 1, 1, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 0.5, 0.5, 0.5, 0.5 },
{ 0, 0, 0, 0, 0 },
},
}
terrain:WriteVoxels(region, resolution, materials, occupancies)

Many terrain methods throw an error if their given region size is too large. The limit is currently 4194304 voxels^3 for ReadVoxels() and WriteVoxels(), and 67108864 voxels^3 for other methods. For methods that take a cframe + size combination (e.g. FillBlock, FillCylinder etc.), then the region volume is calculated from the AABB of the target area.

Maximum Region Size

local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local CFRAME = CFrame.new(0, 20, 0)
local SIZE = 50
local function getRegionVolumeVoxels(region)
local resolution = 4
local size = region.Size
return (size.x / resolution) * (size.y / resolution) * (size.z / resolution)
end
local function isRegionTooLargeForReadWriteVoxels(region)
return getRegionVolumeVoxels(region) > 4194304
end
local function isRegionTooLarge(region)
return getRegionVolumeVoxels(region) > 67108864
end
-- Helper function to get an axis-aligned Region3 from the given cframe and size
local function getAABBRegion(cframe, size)
local inv = cframe:Inverse()
local x = size * inv.RightVector
local y = size * inv.UpVector
local z = size * inv.LookVector
local w = math.abs(x.X) + math.abs(x.Y) + math.abs(x.Z)
local h = math.abs(y.X) + math.abs(y.Y) + math.abs(y.Z)
local d = math.abs(z.X) + math.abs(z.Y) + math.abs(z.Z)
local pos = cframe.Position
local halfSize = Vector3.new(w, h, d) / 2
return Region3.new(pos - halfSize, pos + halfSize):ExpandToGrid(4)
end
-- Specific functions for checking individual methods
local function isRegionTooLargeForFillBall(cframe, radius)
local diameter = radius * 2
return isRegionTooLarge(getAABBRegion(cframe, Vector3.new(diameter, diameter, diameter)))
end
local function isRegionTooLargeForFillBlock(cframe, size)
return isRegionTooLarge(getAABBRegion(cframe, size))
end
local function isRegionTooLargeForFillCylinder(cframe, height, radius)
local diameter = radius * 2
return isRegionTooLarge(getAABBRegion(cframe, Vector3.new(diameter, height, diameter)))
end
local function isRegionTooLargeForFillRegion(region)
return isRegionTooLarge(region)
end
local function isRegionTooLargeForFillWedge(cframe, size)
return isRegionTooLarge(getAABBRegion(cframe, size))
end
local function isRegionTooLargeForReplaceMaterial(region)
return isRegionTooLarge(region)
end
local region = Region3.new(REGION_START, REGION_END)
print(isRegionTooLargeForReadWriteVoxels(region))
print(isRegionTooLargeForFillBall(CFRAME, SIZE))
print(isRegionTooLargeForFillBlock(CFRAME, SIZE))
print(isRegionTooLargeForFillCylinder(CFRAME, SIZE, SIZE))
print(isRegionTooLargeForFillRegion(region))
print(isRegionTooLargeForFillWedge(CFRAME, SIZE))
print(isRegionTooLargeForReplaceMaterial(region))

WriteVoxelsAsync_beta

Paramètres

region: Region3
Valeur par défaut : ""
resolution: number
Valeur par défaut : ""
channelIds: Array
Valeur par défaut : ""

Retours

Évènements