Terrain
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
地形は、少しも遅延がありませんでして、ダイナミックに変形可能な環境を作成できます。現在は、4×4×4のグリッドのセルに基づいています、各セルには 0 から 1 の数があり、ジオメトリがセルを占有する量を表します。これにより、セルのオクペンションが周囲のセルと一緒に
詳しくは、地形 を参照してください。
概要
プロパティ
地形装飾を有効化/無効化します。
アニメーショングラスの長さを指定します。
MaterialColors は、マテリアルカラー機能の編集者であり、 スクリプトによって編集できません 。
マテリアルの色を取得するには、Terrain:GetMaterialColor() を使用します。マテリアルの色を設定するには、Terrain:SetMaterialColor() を使用します。
最大で編集可能な領域の境界を表示します。
地形の水の色。
地形の水の反射量をコントロールします。
地形水の透明度。
地形の水の波の最大高度をスタッドで設定します。
地形の水の波がどれくらい上下するかを毎分単位で設定します。
物理的に移動不可能なパーツを決定します。
パーツの組み立ての角度速度。
世界スペースのパーツアセンブリの中心。
部品の組み立ての直線速度。
パーツのアセンブリの合計質量。
アセンブリのルート部分に関する参照。
パーツの背面の表面タイプを決定します (+Z 方向)。
部品の下面の表面のタイプを決定します (-Y 方向)。
パーツの色を決める。
世界中の BasePart の位置と向きを決める。
パーツが他のパーツと衝突するかどうかを決定します。
空間クエリ操作中にパーツが検討されるかどうかを決定します。
パーツで Touched と TouchEnded イベントが発動するかどうかを決定します。
パーツがシャドウをキャストするかどうかを決定します。
パーツの中心マスが位置する世界の位置を説明します。
部品の衝突グループの名前を説明します。
パーツの色を決める。
パーツの現在の物理プロパティを示します。
パーツの複数の物理プロパティを決定します。
パーツやアセンブリで空気力を有効にまたは無効にする。
Class.BasePart の物理的エクセンツの BasePart 。
Class.BasePart の実際の物理サイズは、物理エンジンによって見られる。
パーツのフロント面のタイプ(-Z 方向)を決定します。
パーツの左側の表面のタイプを決定します (-X 方向)。
ローカルクライアントに表示されるのは、BasePart.Transparency のマルチプライヤーを決定します。
スタジオでパーツを選択できるかどうかを決定します。
部品の質量、密度、ボリュームの製品を説明します。
パーツが硬ボディの総質量または惰性に貢献しているかどうかを決定します。
パーツのテクスチャとデフォルトの物理プロパティを決定します。
Class.Material の名前。
世界のパーツの回転を説明します。
パーツのピボットのオフセットを CFrame から指定します。
部品の世界の位置を説明します。
最後に記アップデートされた物理の更新からの時間。
パーツがスカイボックスを反射する量を決めます。
サイズ変更メソッドによって許可される最小の変更を説明します。
パーツのサイズ変更が可能な顔を説明します。
パーツの右側面の表面の種類を決定します (+X 方向)。
アセンブリのルート部分を決定するための主要ルール。
3軸のパーツの回転
パーツのサイズ (長さ、幅、高さ) を決定します。
パーツのトップフェイスの表面の種類を決定します (+Y 方向)。
パーツの不透明度の逆にあるパーツの見える量を決めます。
方法
地形のセルの中心の世界的な位置を返します (x, y, z)。
グリッドセルの左下の隅の位置を返します (x, y, z)。
地形をクリアします。
地形の一部を TerrainRegion オブジェクトに保存して、後で読み込むことができます。注: TerrainRegion データはサーバーとクライアント間で重複しません。
地形に空のセルがあるかどうかの数を返します。
指定されたスペースに球状の地形を満たします。
指定された場所、回転、サイズ、材料でブロックの滑らかな地形を満たします。
指定されたスペースに滑らかな地形のシリンダーを満たします。
Datatype.Region3 のスムーズな地形でスペースを満たします。
提供された Enum.Material とエリアの CFrame とサイズを持つウェッジ型の地形のボリュームを満たします。
指定された地形素材の現在の地形素材の色を返します。
地形の一部を地形オブジェクトに適用します。注: TerrainRegion データは、サーバーとクライアントの間で重複しません。
チャンネル名に基づいて、地形ボクセルデータの領域をテーブル形式で返します。
テーブル形式で特定の地形のスムーズな地形を返します。
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):void
地域内の素材の地形を別の素材に置き換えます。
指定された地形材料の現在の地形材料の色を設定します。
ポイントの位置を含むグリッドセルの位置を返します。
位置がグリッドの端にあるとき、空のグリッドセルを含むグリッドセルの場所を返します。
位置がグリッドの端にあるとき、ポイント位置を含むグリッドセルの場所を返します。
ボクセルチャンネルデータの辞書を使用して地形の領域を設定します。
テーブル形式を使用して特定の地形を滑らかに設定します。
アセンダントなインパルスをアセンブリに適用します。
アセンダリーをアセンダリーの center of mass に適用します。
指定された位置にインパルスを適用します。
パーツが互いに衝突できるかどうかを返します。
パートのネットワーク所有権を設定できるかどうかをチェックします。
オブジェクトに接続されたパーツのテーブルを任意の剛性関節で返します。
このパーツに接続されているすべての共同または制限を返します。
Class.BasePart.Mass|Mass プロパティの値を返します。
このパートのネットワーク所有者が現在のプレイヤーであるか、サーバーの場合、nilです。
ゲームエンジンがこのパーツのネットワーク所有者を自動的に決定する場合、 true が返されます。
パーツのアセンブルのベース部分を返します。
このパーツとインターセクトする BasePart.CanCollide のすべての部分のテーブルを返します。
このパーツに関連するこの部分のアセンブリの直線速度を返します。
オブジェクトが配置するパーツに接続されている場合、Anchoredパーツなど、返りは Class.BasePart.Anchored|Anchored パーツです。
Studio サイズ変更ツールを使用すると、オブジェクトのサイズが変更されます。
これと接続されたすべての部品の所有者として指定されたプレイヤーを設定します。
ゲームエンジンは、パーツの物理を処理するプロセスをクライアントまたはサーバーの 1 つで処理するかをダイナミックに決定します。
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
パーツと他のパーツの重複するジオメトリから新しい IntersectOperation を作成します。
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Class.UnionOperation を作成します、Class.UnionOperation は、Class.UnionOperation のパーツのオートポイントによってオートポイントをオーバーライドします。
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
パーツ、および、パーツが入った配列のジオメトリを含む新しい UnionOperation をパーツから作成します。
Class.PVInstance のピボットを取得します。
Class.PVInstance とそのすべての子孫 PVInstances は、ピボットが指定の CFrame に移動します。
プロパティ
MaterialColors
MaterialColors は、マテリアルカラー機能の編集者であり、 スクリプトによって編集できません 。
マテリアルの色を取得するには、Terrain:GetMaterialColor() を使用します。
マテリアルの色を設定するには、Terrain:SetMaterialColor() を使用します。
方法
Clear
地形をクリアします。
戻り値
CopyRegion
地形の一部を TerrainRegion オブジェクトに保存して、後で読み込むことができます。注: TerrainRegion データはサーバーとクライアント間で重複しません。
パラメータ
戻り値
コードサンプル
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
指定されたスペースに球状の地形を満たします。
パラメータ
戻り値
コードサンプル
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
指定された場所、回転、サイズ、材料でブロックの滑らかな地形を満たします。
パラメータ
戻り値
FillCylinder
指定されたスペースに滑らかな地形のシリンダーを満たします。CFrame、高さ、および範囲を使用してスペースを定義します。
使用
workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)
パラメータ
戻り値
FillRegion
Datatype.Region3 のスムーズな地形でスペースを満たします。
パラメータ
戻り値
FillWedge
FillWedge() は、Terrain のウェッジ型のボリュームを、Enum.Material とエリアの 0> Datatype.CFrame0> とサイズを指定して、FillWedge()3> のオリエントエッジと同じに扱います。ウェッジ
パラメータ
戻り値
PasteRegion
地形の一部を地形オブジェクトに適用します。注: TerrainRegion データは、サーバーとクライアントの間で重複しません。
パラメータ
戻り値
コードサンプル
--[[
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
チャンネル名に基づいて、地形ボクセルデータの領域をテーブル形式で返します。
パラメータ
読み込むターゲットの領域。ボクセルグリッドに沿って必要に応じて整列する必要があります。領域が大きすぎるとエラーが発生します。現在の上限は 4194304 ボクセルです。
ボクセル解像度。4 でなければなりません。
ボクセルデータからアクセスする必要があるチャンネル 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 配列サイズを表示します。
コードサンプル
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
テーブル形式で特定の地形のスムーズな地形を返します。
パラメータ
読み込み先の領域。領域がボクセルグリッドに沿っている必要があります。領域が大きすぎると、エラーが発生します。上限は現在 4194304 ボクセル^3です。
ボクセル解像度。4 でなければなりません。
戻り値
3D 配列として、原始のボクセルデータを 2 つ返します。
- materials - ターゲットエリアの Enum.Material の 3D 配列。また、サイズフィールドを含みます、 ネストされた配列のサイズと同等です。
- occupancies - ターゲットエリアのOccupancyの 3D 配列。Size フィールドは、ネストされた配列のサイズと同等です。
コードサンプル
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
ReplaceMaterial は、特定の Class.Terrain 素材の地形を、 Datatype.Region3 素材の中にある他の素材と交換します。基本的に、それは Class.Terrain 素材の中でのファインド-アンド-プレースオペレーションです。
制限
このメソッドを呼び出すと、resolutionパラメーターは正確に 4 でなければなりません。さらに、Region3 の最小値および最大値のコンポーネントは、Region3:ExpandToGrid() によって 4 で分割できます。Use Datatype.Region3:ExpandToGrid() を使用して、この関数に対
パラメータ
交換オペレーションが実発生される領域。
交換オペレーションが実プレースされる解像度; 現在、これは正確に 4 でなければなりません。
交換する古い材料。
新しい素材。
戻り値
コードサンプル
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
指定された地形素材の現在の地形素材の色を設定します。地形素材は、ベースの色を指定された色に変更します。
パラメータ
戻り値
WorldToCellPreferEmpty
位置がグリッドの端にあるとき、空のグリッドセルを含むグリッドセルの場所を返します。
パラメータ
戻り値
WorldToCellPreferSolid
位置がグリッドの端にあるとき、ポイント位置を含むグリッドセルの場所を返します。
パラメータ
戻り値
WriteVoxelChannels
ボクセルチャンネルデータの辞書を使用して地形の領域を設定します。
パラメータ
書き込むターゲットの領域。ボクセルグリッドに沿って必要に応じて配置する必要があります。領域が大きすぎるとエラーが発生します。現在の制限は 4194304 ボクセルです。
ボクセル解像度。4 でなければなりません。
Class.Terrain:ReadVoxelChannels()|ReadVoxelChannels() の戻り値に似たボクセルデータのディクティオナリー。 キーは、それぞれのチャンネル ID を 3D データの配列として表示します。 ディクティオナリーは単一または複数のチャンネル入力をサポートできます。
- SolidOccupancy — 素材のボクセルのオクペンシー、指定された SolidMaterial チャンネルで指定された値です。これは、0 (空の) と 1 (フル) の間の値です。
- LiquidOccupancy — 材料の voxel の中の Water の占有量を指定します。如果 SolidOccupancy が 1 であり、0> SolidMaterial0> が 0 であると、これは 0 に
戻り値
コードサンプル
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
テーブル形式を使用して特定の地形を滑らかに設定します。
パラメータ
書き込むターゲットの領域。ボクセルグリッドに沿って必要に従わなければなりません。領域が大きすぎるとエラーが発生します。
ボクセル解像度。4 でなければなりません。
3D 配列の枚数は、ターゲットの領域のサイズを Voxels で正確にマッチする必要があります。
ボクセルのオクペーションの 3D 配列 (0 から 1 の間の番号)。サイズは、ボクセルのターゲット領域のサイズと一致する必要があります。
戻り値
コードサンプル
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)
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))