Avec ce tuto tu peux créer un océan ou une espace d’eau confiné par exemple comme une piscine.
Par script, tu généreras un plan d’eau sur toute ta map comme pour un océan ou en fonction de la taille d’un part que tu disposeras sur ton jeu.
Dans un premier temps, crée un script sur le serveur qui va générer un espace d’eau soit un océan ou un espace contraint dans un part :
Crée un ModuleScript sous ServerScriptService :

Renomme le nom du moduleScript en waterGenerator :

Saisie le code suivant pour générer un espace d’eau comme un océan ou un espace d’eau contraint par un part comme une piscine :
local waterGenerator = {}
-- Valeurs par défaut
local TAILLE_DEFAUT = 4048
local PROFONDEUR_DEFAUT = 200
-- Privée : fonction centrale de génération
local function createWater(terrain, centreX, centreY, centreZ, tailleX, tailleY, tailleZ)
if not terrain then
warn("[waterGenerator] Terrain manquant.")
return
end
local cframe = CFrame.new(centreX, centreY, centreZ)
local size = Vector3.new(tailleX, tailleY, tailleZ)
terrain:FillBlock(cframe, size, Enum.Material.Water)
end
-- Génère une mer plate
-- hauteur : niveau Y de la surface
-- profondeur : épaisseur de l'eau vers le bas
-- taille : largeur X et Z (optionnel, défaut 4048)
function waterGenerator.createSea(terrain, hauteur, profondeur, taille)
if not hauteur or hauteur <= 0 then
warn("[waterGenerator] Hauteur invalide ou manquante.")
return
end
profondeur = profondeur or PROFONDEUR_DEFAUT
if profondeur <= 0 then
warn("[waterGenerator] Profondeur invalide.")
return
end
taille = taille or TAILLE_DEFAUT
local centreY = hauteur - profondeur / 2
createWater(terrain, 0, centreY, 0, taille, profondeur, taille)
end
-- Génère de l'eau centrée sur une Part
-- La part définit position et taille (axes intentionnellement remappés X→Z, Z→Y, Y→X)
function waterGenerator.createPart(terrain, part)
if not part then
warn("[waterGenerator] Part manquante.")
return
end
-- Préparation de la part : on la fait disparaître
part.Anchored = true
part.CanCollide = false
part.Transparency = 1
createWater(
terrain,
part.Position.X,
part.Position.Y,
part.Position.Z,
part.Size.X, -- tailleX
part.Size.y, -- tailleY
part.Size.Z -- tailleZ
)
end
return waterGenerator
Comment créer un océan :
Dans ton workpace, crée un script :

local terrain = workspace.Terrain
local waterGenerator = require(game.ServerScriptService.waterGenerator)
-- Génération de la mer
waterGenerator.createSea(terrain, 5, 200)
Si tu lances ton jeu :

Comment créer une piscine :
Crée un part qui va contenir l’eau de ta piscine :

Crée un script avec le code suivant :

local terrain = workspace.Terrain
local piscine = script.Parent
local waterGenerator = require(game.ServerScriptService.waterGenerator)
waterGenerator.createPart(terrain, piscine)
Lance ton jeu, tu obtiens une masse d’eau contenu dans ton part :

Et avec un peu de décor, tu obtiendras une belle piscine :

