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

Terrain vous permet de créer des environnements dynamiquement morphables avec peu ou pas de décalage. Il est actuellement basé sur une grille de cellules 4×4×4, où chaque cellule a un nombre entre 0 et 1 représentant la quantité de la géométrie qui doit 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 l'herbe animée.

  • MaterialColors:BinaryString
    Non scriptable
    Lecture parallèle

    MaterialColors représente l'éditeur pour la fonctionalitéde couleur de 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 modifiable possible.

  • Lecture parallèle

    La teinte de l'eau du terrain.

  • Lecture parallèle

    Contrôle la façon dont les reflets 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 de terrain dans les studs.

  • Lecture parallèle

    Définit le nombre de fois que les ondes 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 immovable physiquement.

  • 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 vélocité 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 le type de surface pour le dos d'une pièce (+Z direction).

  • Détermine le type de surface pour le visage inférieur d'une partie (-Y direction).

  • Non répliqué
    Lecture parallèle

    Détermine la couleur d'une partie.

  • Lecture parallèle

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

  • Lecture parallèle

    Détermine si une partie peut se heurter à d'autres parties.

  • Lecture parallèle

    Détermine si la partie est envisagée pendant les opérations de requête spatiale.

  • Lecture parallèle

    Détermine si les événements Touched et TouchEnded se déclenchent 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écrivez la position dans le monde dans laquelle se trouve le centre de masse d'une partie.

  • Non répliqué
    Lecture parallèle

    Décrivez le nom d'un groupe de collision de pièce.

  • 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 partie.

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

  • Lecture parallèle

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

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

    Le CFrame des parties physiques de la BasePart .

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

    La taille physique réelle de la BasePart comme indiqué par le moteur de physique.

  • Lecture parallèle

    Détermine le type de surface pour la face avant d'une pièce (-Z direction).

  • Lecture parallèle

    Détermine le type de surface pour le visage gauche d'une pièce (-X direction).

  • 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 peut être sélectionnée dans Studio.

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

    Décrivez la masse de la pièce, 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écrivez la rotation de la pièce dans le monde.

  • Lecture parallèle

    Spécifie l'Offset de la pivot de la partie de son CFrame.

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

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

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

    Temps depuis la dernière mise à jour de la physique.

  • Lecture parallèle

    Détermine la quantité de lumière reflétée par une pièce.

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

    Décrivez la plus petite modification de taille autorisée par la méthode Redimensionner.

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

    Décrivez 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 (+X direction).

  • Lecture parallèle

    La règle principale dans le détermination de la partie racine d'une assemblage.

  • 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 partie (Longueur, largeur, hauteur).

  • Lecture parallèle

    Détermine le type de surface pour la face supérieure d'une pièce (+ Y direction).

  • Lecture parallèle

    Détermine la quantité de partie qui 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

Actuellement, il active ou désactive l'herbe animée sur le matériau de terrain herbe , bien que futures modifications de cette propriété puissent contrôler des fonctionnalités décoratives supplémentaires.

GrassLength

Non scriptable
Lecture parallèle

Spécifie la longueur de l'herbe animée sur le matériau de terrain Herbe , en supposant que Decoration est activé. Les valeurs valides sont entre 0,1 et 1.

MaterialColors

BinaryString
Non scriptable
Lecture parallèle

MaterialColors représente l'éditeur pour la fonctionalitéde couleur de 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 modifiable possible.

WaterColor

Lecture parallèle

La teinte de l'eau du terrain.

WaterReflectance

Lecture parallèle

Contrôle la façon dont les reflets 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 de terrain dans les studs. Ceci est actuellement limité entre 0 et 1.

WaterWaveSpeed

Lecture parallèle

Définit le nombre de fois que les ondes de terrain se déplaceront en haut et en bas par minute. Cela est actuellement limité entre 0 et 100.

Méthodes

CellCenterToWorld

Retourne la position du monde du centre de la cellule de terrain (x, y, z).

Paramètres


Retours

CellCornerToWorld

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

Paramètres


Retours

Clear

void

Efface le terrain.


Retours

void

CopyRegion

Stores un morceau de terrain dans un objet TerrainRegion afin qu'il puisse être chargé plus tard. Remarquez que les données TerrainRegion ne se répliquent pas entre le serveur et le client.

Paramètres

region: Region3int16

Retours

Échantillons de code

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

void

Remplit un ballon de terrain lisse dans un espace donné.

Paramètres

center: Vector3

La position du centre de la boule de terrain.

radius: number

Le rayon en studs de la boule de terrain.

material: Enum.Material

Le Enum.Material de la balle de terrain.


Retours

void

Échantillons de code

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

void

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

Paramètres

cframe: CFrame

Le cframe (position et orientation) du bloc de terrain.

size: Vector3

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

material: Enum.Material

Le Enum.Material du bloc de terrain.


Retours

void

FillCylinder

void

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

Utilisation


workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)

Paramètres

cframe: CFrame

Le CFrame (position et orientation) du cylindre de terrain.

height: number

La hauteur dans les studs du cône de terrain.

radius: number

Le rayon dans les studs du cône de terrain.

material: Enum.Material

Le Enum.Material du cône de terrain.


Retours

void

FillRegion

void

Remplit un Region3 espace avec un terrain lisse.

Paramètres

region: Region3
resolution: number
material: Enum.Material

Retours

void

FillWedge

void

FillWedge() Remplit un volume en forme de cale de Terrain avec le donné Enum.Material et la zone 0> Datatype.CFrame0> et la taille. L'orientation du cale est la même qu'un équivalent FillWedge()3>.

Paramètres

cframe: CFrame

La position et l'orientation du coin à remplir.

size: Vector3

La taille du coin à remplir.

material: Enum.Material

Le matériau avec lequel le coin sera rempli.


Retours

void

GetMaterialColor

Écrire en parallèle

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

Paramètres

material: Enum.Material

Retours

PasteRegion

void

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

Paramètres

corner: Vector3int16
pasteEmptyCells: bool

Retours

void

Échantillons de code

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 voxel de terrain dans le format de la table en fonction des noms des canaux.

Paramètres

region: Region3

Région cible pour laquelle lire. Doit être positionné sur la grille de voxel. Lancerra une erreur si la région est trop grande ; la limite actuelle est de 4194304 voxels³.

resolution: number

Résolution du voxel. Doit être 4.

channelIds: Array

Un tableau d'identifiants de canal (chaînes) qui doivent être accédés à partir des données voxel. Chaque identifiant de canal représente un type de données qui est stocké dans le voxel. Les ID actuels sont {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .


Retours

Renvoie des données voxel en tant que dictionnaire en fonction de l'entrée channelIds. Les clés représentent chacun des ID de canal avec leur valeur respective en tant qu'ensemble de données 3D.

  • SolidMaterial — Le matériau Enum.Material du voxel. Remarquez que Water n'est plus pris en charge ; à la place, un voxel qui contient de l'eau aura une valeur de 0> LiquidOccupancy0> .
  • SolidOccupancy — L'occupation du matériau du voxel comme spécifié dans le chat (chat privé)SolidMaterial. Ceci est une valeur entre 0 ( vide ) et 1 ( pleine ).
  • LiquidOccupancy — Spécifie la occupation du matériau Water dans un voxel comme une valeur entre 0 (pas d'eau) et 1 (plein d'eau). Si le SolidOccupancy est 1 et le 0> SolidMaterial0> n'est pas 3>

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 dans le format de la table.

Paramètres

region: Region3

Région cible pour laquelle lire. Doit être positionné sur la grille de voxel. Lancerra un erreur si la région est trop grande. La limite actuelle est de 4194304 voxels ^ 3.

resolution: number

Résolution du voxel. Doit être 4.


Retours

Renvoie les données de voxel brut comme deux tableaux 3D.

  • materials - 3D array of Enum.Material from the target area. Contient également un champ de taille, équivalent aux dimensions des tableaux imbriqués.
  • occupancies - 3D tableau des valeurs d'occupation de la zone cible. Contient également un champ de taille, équivalent 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)

ReplaceMaterial

void

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

Contraintes

Lors de l'appel de cette méthode, le paramètre resolution doit être exactement 4. De plus, le paramètre Region3 doit être alinéé sur la grille des matériaux du terrain, c'est-à-dire les 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 substitution aura survernir.

resolution: number

La résolution à laquelle l'opération de substitution aura emplacement; pour le moment, cela doit être exactement 4.

sourceMaterial: Enum.Material

Le matériel ancien qui sera remplacé.

targetMaterial: Enum.Material

Le nouveau matériau.


Retours

void

Échantillons de code

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

void

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

Paramètres

material: Enum.Material
value: Color3

Retours

void

WorldToCell

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

Paramètres

position: Vector3

Retours

WorldToCellPreferEmpty

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

Paramètres

position: Vector3

Retours

WorldToCellPreferSolid

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

Paramètres

position: Vector3

Retours

WriteVoxelChannels

void

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

Paramètres

region: Region3

Région cible pour écrire. Doit êtrealigné sur la grille de voxel. Lancerra un erreur si la région est trop grande ; la limite actuelle est de 4194304 voxels³.

resolution: number

Résolution du voxel. Doit être 4.

channels: Dictionary

Dictionnaire de données voxel similaire à la valeur de retour de ReadVoxelChannels() . Les clés représentent l'ID de chaque canal avec leur valeur respective en tant qu'arrêt de 3D. Le dictionnaire peut prendre en charge l'entrée unique ou multiple d'un canal.

  • SolidMaterial — Le matériau Enum.Material du voxel. Remarquez que Water n'est plus pris en charge ; à la place, un voxel qui contient seulement de l'eau doit être entré comme 0> SolidMaterial = Enum.Material.Air, L
  • SolidOccupancy — L'occupation du matériau du voxel comme spécifié dans le chat (chat privé)SolidMaterial. Ceci devrait être une valeur entre 0 ( vide ) et 1 ( pleine ).
  • LiquidOccupancy — Spécifie la occupation du matériau Water dans un voxel comme une valeur entre 0 (pas d'eau) et 1 (plein d'eau). Si le SolidOccupancy est 1 et le 0> SolidMaterial0> n'est pas 3>

Retours

void

É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

void

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

Paramètres

region: Region3

Région cible pour écrire. Doit êtrealigné sur la grille de voxel. Lancerra un erreur si la région est trop grande.

resolution: number

Résolution du voxel. Doit être 4.

materials: Array

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

occupancy: Array

3D array of voxel occupations (number between 0 et 1). Les dimensions doivent correspondre exactement à la taille de la région cible en voxels.


Retours

void

Échantillons de code

Example

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)
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))

Évènements