Terrain

非推奨を表示

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

作成できません

地形は、少しも遅延がありませんでして、ダイナミックに変形可能な環境を作成できます。現在は、4×4×4のグリッドのセルに基づいています、各セルには 0 から 1 の数があり、ジオメトリがセルを占有する量を表します。これにより、セルのオクペンションが周囲のセルと一緒に

詳しくは、地形 を参照してください。

概要

プロパティ

  • スクリプト作成できません
    並列読み取り

    地形装飾を有効化/無効化します。

  • スクリプト作成できません
    並列読み取り

    アニメーショングラスの長さを指定します。

  • MaterialColors:BinaryString
    スクリプト作成できません
    並列読み取り

    MaterialColors は、マテリアルカラー機能の編集者であり、 スクリプトによって編集できません

    マテリアルの色を取得するには、Terrain:GetMaterialColor() を使用します。マテリアルの色を設定するには、Terrain:SetMaterialColor() を使用します。

  • 読み取り専用
    複製されていません
    並列読み取り

    最大で編集可能な領域の境界を表示します。

  • 並列読み取り

    地形の水の色。

  • 並列読み取り

    地形の水の反射量をコントロールします。

  • 並列読み取り

    地形水の透明度。

  • 並列読み取り

    地形の水の波の最大高度をスタッドで設定します。

  • 並列読み取り

    地形の水の波がどれくらい上下するかを毎分単位で設定します。

BasePart から継承した プロパティ
  • 並列読み取り

    物理的に移動不可能なパーツを決定します。

  • 複製されていません
    並列読み取り

    パーツの組み立ての角度速度。

  • 読み取り専用
    複製されていません
    並列読み取り

    世界スペースのパーツアセンブリの中心。

  • 複製されていません
    並列読み取り

    部品の組み立ての直線速度。

  • 読み取り専用
    複製されていません
    並列読み取り

    パーツのアセンブリの合計質量。

  • 読み取り専用
    複製されていません
    並列読み取り

    アセンブリのルート部分に関する参照。

  • 並列読み取り

    パーツの背面の表面タイプを決定します (+Z 方向)。

  • 部品の下面の表面のタイプを決定します (-Y 方向)。

  • 複製されていません
    並列読み取り

    パーツの色を決める。

  • 並列読み取り

    世界中の BasePart の位置と向きを決める。

  • 並列読み取り

    パーツが他のパーツと衝突するかどうかを決定します。

  • 並列読み取り

    空間クエリ操作中にパーツが検討されるかどうかを決定します。

  • 並列読み取り

    パーツで TouchedTouchEnded イベントが発動するかどうかを決定します。

  • 並列読み取り

    パーツがシャドウをキャストするかどうかを決定します。

  • 読み取り専用
    複製されていません
    並列読み取り

    パーツの中心マスが位置する世界の位置を説明します。

  • 複製されていません
    並列読み取り

    部品の衝突グループの名前を説明します。

  • 複製されていません
    並列読み取り

    パーツの色を決める。

  • 読み取り専用
    複製されていません
    並列読み取り

    パーツの現在の物理プロパティを示します。

  • パーツの複数の物理プロパティを決定します。

  • 並列読み取り

    パーツやアセンブリで空気力を有効にまたは無効にする。

  • 読み取り専用
    複製されていません
    並列読み取り

    Class.BasePart の物理的エクセンツの BasePart

  • 読み取り専用
    複製されていません
    並列読み取り

    Class.BasePart の実際の物理サイズは、物理エンジンによって見られる。

  • 並列読み取り

    パーツのフロント面のタイプ(-Z 方向)を決定します。

  • 並列読み取り

    パーツの左側の表面のタイプを決定します (-X 方向)。

  • 非表示
    複製されていません
    並列読み取り

    ローカルクライアントに表示されるのは、BasePart.Transparency のマルチプライヤーを決定します。

  • 並列読み取り

    スタジオでパーツを選択できるかどうかを決定します。

  • 読み取り専用
    複製されていません
    並列読み取り

    部品の質量、密度、ボリュームの製品を説明します。

  • 並列読み取り

    パーツが硬ボディの総質量または惰性に貢献しているかどうかを決定します。

  • 並列読み取り

    パーツのテクスチャとデフォルトの物理プロパティを決定します。

  • 複製されていません
    並列読み取り

    Class.Material の名前。

  • 非表示
    複製されていません
    並列読み取り

    世界のパーツの回転を説明します。

  • 並列読み取り

    パーツのピボットのオフセットを CFrame から指定します。

  • 非表示
    複製されていません
    並列読み取り

    部品の世界の位置を説明します。

  • 非表示
    読み取り専用
    複製されていません
    並列読み取り

    最後に記アップデートされた物理の更新からの時間。

  • 並列読み取り

    パーツがスカイボックスを反射する量を決めます。

  • 読み取り専用
    複製されていません
    並列読み取り

    サイズ変更メソッドによって許可される最小の変更を説明します。

  • 読み取り専用
    複製されていません
    並列読み取り

    パーツのサイズ変更が可能な顔を説明します。

  • 並列読み取り

    パーツの右側面の表面の種類を決定します (+X 方向)。

  • 並列読み取り

    アセンブリのルート部分を決定するための主要ルール。

  • 複製されていません
    並列読み取り

    3軸のパーツの回転

  • 複製されていません
    並列読み取り

    パーツのサイズ (長さ、幅、高さ) を決定します。

  • 並列読み取り

    パーツのトップフェイスの表面の種類を決定します (+Y 方向)。

  • 並列読み取り

    パーツの不透明度の逆にあるパーツの見える量を決めます。

PVInstance から継承した プロパティ
  • 複製されていません
    スクリプト作成できません
    並列読み取り
  • 複製されていません
    スクリプト作成できません
    並列読み取り

方法

BasePart から継承した 方法PVInstance から継承した 方法
  • 並列書き込み

    Class.PVInstance のピボットを取得します。

  • PivotTo(targetCFrame : CFrame):void

    Class.PVInstance とそのすべての子孫 PVInstances は、ピボットが指定の CFrame に移動します。

イベント

BasePart から継承した イベント

プロパティ

Decoration

スクリプト作成できません
並列読み取り

現在、 地形素材にアニメーショングラスを有効にするか無効にすることができますが、このプロパティの将来の変更により、追加のデコレーション機能を制御できます。

GrassLength

スクリプト作成できません
並列読み取り

草 地形素材の長さを指定します。Decoration が有効であると仮定します。有効な値は、0.1から1の間です。

MaterialColors

BinaryString
スクリプト作成できません
並列読み取り

MaterialColors は、マテリアルカラー機能の編集者であり、 スクリプトによって編集できません

マテリアルの色を取得するには、Terrain:GetMaterialColor() を使用します。

マテリアルの色を設定するには、Terrain:SetMaterialColor() を使用します。

MaxExtents

読み取り専用
複製されていません
並列読み取り

最大で編集可能な領域の境界を表示します。

WaterColor

並列読み取り

地形の水の色。

WaterReflectance

並列読み取り

地形の水の反射量をコントロールします。

WaterTransparency

並列読み取り

地形水の透明度。

WaterWaveSize

並列読み取り

地形の水のウェーブの最大高さをスタッドで設定します。これは現在、0 から 1 の間に制限されています。

WaterWaveSpeed

並列読み取り

地形の水の波がどれくらい上下に移動するかを毎分単位で設定します。これは現在、0から 100 の間に制限されています。

方法

CellCenterToWorld

地形のセルの中心の世界的な位置を返します (x, y, z)。

パラメータ


戻り値

CellCornerToWorld

グリッドセルの左下の隅の位置を返します (x, y, z)。

パラメータ


戻り値

Clear

void

地形をクリアします。


戻り値

void

CopyRegion

地形の一部を TerrainRegion オブジェクトに保存して、後で読み込むことができます。注: TerrainRegion データはサーバーとクライアント間で重複しません。

パラメータ

region: Region3int16

戻り値

コードサンプル

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

地形に空のセルがあるかどうかの数を返します。


戻り値

FillBall

void

指定されたスペースに球状の地形を満たします。

パラメータ

center: Vector3

地形ボールの中心の位置。

radius: number

地形ボールのスタッドの範囲。

material: Enum.Material

地形ボールの Enum.Material


戻り値

void

コードサンプル

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

指定された場所、回転、サイズ、材料でブロックの滑らかな地形を満たします。

パラメータ

cframe: CFrame

地形ブロックの cframe (位置と向き)。

size: Vector3

正方形のブロックのサイズ - 高さと幅。

material: Enum.Material

地形ブロックの Enum.Material


戻り値

void

FillCylinder

void

指定されたスペースに滑らかな地形のシリンダーを満たします。CFrame、高さ、および範囲を使用してスペースを定義します。

使用


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

パラメータ

cframe: CFrame

地形シリンダーの CFrame (位置とオリエンテーション)。

height: number

地形シリンダーの高さ。

radius: number

地形シリンダーのスタッドの範囲。

material: Enum.Material

地形シリンダーの Enum.Material


戻り値

void

FillRegion

void

Datatype.Region3 のスムーズな地形でスペースを満たします。

パラメータ

region: Region3
resolution: number
material: Enum.Material

戻り値

void

FillWedge

void

FillWedge() は、Terrain のウェッジ型のボリュームを、Enum.Material とエリアの 0> Datatype.CFrame0> とサイズを指定して、FillWedge()3> のオリエントエッジと同じに扱います。ウェッジ

パラメータ

cframe: CFrame

埋めるウェッジの位置と方向。

size: Vector3

満たすウェッジのサイズ。

material: Enum.Material

ウェッジに充填する材料。


戻り値

void

GetMaterialColor

並列書き込み

指定された地形素材の現在の地形素材の色を返します。

パラメータ

material: Enum.Material

戻り値

PasteRegion

void

地形の一部を地形オブジェクトに適用します。注: TerrainRegion データは、サーバーとクライアントの間で重複しません。

パラメータ

corner: Vector3int16
pasteEmptyCells: bool

戻り値

void

コードサンプル

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

並列書き込み

チャンネル名に基づいて、地形ボクセルデータの領域をテーブル形式で返します。

パラメータ

region: Region3

読み込むターゲットの領域。ボクセルグリッドに沿って必要に応じて整列する必要があります。領域が大きすぎるとエラーが発生します。現在の上限は 4194304 ボクセルです。

resolution: number

ボクセル解像度。4 でなければなりません。

channelIds: Array

ボクセルデータからアクセスする必要があるチャンネル ID のアレイ。各チャンネル ID は、ボクセルに保存されたデータの種類を表します。現在サポートされている ID は {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} です。


戻り値

入力に基づくボクセルデータを channelIds のディクターとして返します。キーは、それぞれのチャンネル ID の値を 3D データの配列として表示します。

  • SolidMaterial — ボクセルの Enum.Material 素材。注意してください、Water はサポートされていません。代わりに、水を含むボクセルが値を持つ 0> LiquidOccupancy0> になります。
  • SolidOccupancy — 素材のボクセルのオクパシティ、指定された SolidMaterial チャンネルで指定されている値の間です。これは、0 (空の) と 1 (フル) の間の値です。
  • LiquidOccupancy — 材料の voxel の中の Water の占有量を指定します。如果 SolidOccupancy が 1 であり、0> SolidMaterial0> が 0 であると、これは 0 に

辞書には、Size キーも含まれており、各チャンネルデータの 3D 配列サイズを表示します。

コードサンプル

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

並列書き込み

テーブル形式で特定の地形のスムーズな地形を返します。

パラメータ

region: Region3

読み込み先の領域。領域がボクセルグリッドに沿っている必要があります。領域が大きすぎると、エラーが発生します。上限は現在 4194304 ボクセル^3です。

resolution: number

ボクセル解像度。4 でなければなりません。


戻り値

3D 配列として、原始のボクセルデータを 2 つ返します。

  • materials - ターゲットエリアの Enum.Material の 3D 配列。また、サイズフィールドを含みます、 ネストされた配列のサイズと同等です。
  • occupancies - ターゲットエリアのOccupancyの 3D 配列。Size フィールドは、ネストされた配列のサイズと同等です。

コードサンプル

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 は、特定の Class.Terrain 素材の地形を、 Datatype.Region3 素材の中にある他の素材と交換します。基本的に、それは Class.Terrain 素材の中でのファインド-アンド-プレースオペレーションです。

制限

このメソッドを呼び出すと、resolutionパラメーターは正確に 4 でなければなりません。さらに、Region3 の最小値および最大値のコンポーネントは、Region3:ExpandToGrid() によって 4 で分割できます。Use Datatype.Region3:ExpandToGrid() を使用して、この関数に対

パラメータ

region: Region3

交換オペレーションが実発生される領域。

resolution: number

交換オペレーションが実プレースされる解像度; 現在、これは正確に 4 でなければなりません。

sourceMaterial: Enum.Material

交換する古い材料。

targetMaterial: Enum.Material

新しい素材。


戻り値

void

コードサンプル

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

指定された地形素材の現在の地形素材の色を設定します。地形素材は、ベースの色を指定された色に変更します。

パラメータ

material: Enum.Material
value: Color3

戻り値

void

WorldToCell

ポイントの位置を含むグリッドセルの位置を返します。

パラメータ

position: Vector3

戻り値

WorldToCellPreferEmpty

位置がグリッドの端にあるとき、空のグリッドセルを含むグリッドセルの場所を返します。

パラメータ

position: Vector3

戻り値

WorldToCellPreferSolid

位置がグリッドの端にあるとき、ポイント位置を含むグリッドセルの場所を返します。

パラメータ

position: Vector3

戻り値

WriteVoxelChannels

void

ボクセルチャンネルデータの辞書を使用して地形の領域を設定します。

パラメータ

region: Region3

書き込むターゲットの領域。ボクセルグリッドに沿って必要に応じて配置する必要があります。領域が大きすぎるとエラーが発生します。現在の制限は 4194304 ボクセルです。

resolution: number

ボクセル解像度。4 でなければなりません。

channels: Dictionary

Class.Terrain:ReadVoxelChannels()|ReadVoxelChannels() の戻り値に似たボクセルデータのディクティオナリー。 キーは、それぞれのチャンネル ID を 3D データの配列として表示します。 ディクティオナリーは単一または複数のチャンネル入力をサポートできます。

  • SolidMaterial — ボクセルの Enum.Material 素材。注意してください、Water はもうサポートされていません、代わりに、水のみを含むボクセルを入力する必要があります
  • SolidOccupancy — 素材のボクセルのオクペンシー、指定された SolidMaterial チャンネルで指定された値です。これは、0 (空の) と 1 (フル) の間の値です。
  • LiquidOccupancy — 材料の voxel の中の Water の占有量を指定します。如果 SolidOccupancy が 1 であり、0> SolidMaterial0> が 0 であると、これは 0 に

戻り値

void

コードサンプル

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

テーブル形式を使用して特定の地形を滑らかに設定します。

パラメータ

region: Region3

書き込むターゲットの領域。ボクセルグリッドに沿って必要に従わなければなりません。領域が大きすぎるとエラーが発生します。

resolution: number

ボクセル解像度。4 でなければなりません。

materials: Array

3D 配列の枚数は、ターゲットの領域のサイズを Voxels で正確にマッチする必要があります。

occupancy: Array

ボクセルのオクペーションの 3D 配列 (0 から 1 の間の番号)。サイズは、ボクセルのターゲット領域のサイズと一致する必要があります。


戻り値

void

コードサンプル

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

イベント