Roblox Battle Royale 擁有一個建築系統,讓用戶能夠建造自己的建築,以獲得更高的高度來獲得更好的射擊角度,或在戰鬥中提供掩護。使用菜單,用戶可以從多種不同的磚塊類型中選擇並將其放置在世界中。

為了維持有序和結構化的系統:
- 每個磚塊必須連接到另一個現有的磚塊或地面。
- 將所有建築磚塊放置在與 3D 世界協調的網格中,以便磚塊能夠正確連接且不重疊。
磚塊組成
為了使用戶能夠快速輕鬆地建造新磚塊,建築系統需要了解哪些磚塊互相連接,以及可以在網格上放置新磚塊的位置。
磚塊使用三個組件:作為磚塊物件的 視覺資產、有關磚塊在參考其他世界物件中佔據的 空間 的資訊,以及允許附加磚塊連接到可用邊緣的磚塊的 連接點。
資產
資產是一個 BasePart(Part、MeshPart 等)放置在 ReplicatedStorage/BuildingSystem/Assets 中,代表該磚塊在 3D 世界中的外觀。這個 BasePart 必須有兩個子元素:
空間佔據
確保磚塊在網格系統中佔據正確位置是重要的,可以使用位掩碼來實現。位掩碼表示該磚塊類型在基本世界空間部分或單元中佔據的物理空間。每個建築系統的磚塊/物件可以佔據單元的任何一個面(前、左、後、右、頂、底)以及單元中任何數量的八分位。如果對於某個單元而言,物件佔據的所有面和八分位都可用,使用者才能在該單元中放置建築系統物件。建築系統物件的空間佔據定義如下:
| 位索引 | 意義 |
|---|---|
| 0 | 單元的底面 |
| 1 | 單元的頂面 |
| 2 | 單元的右面 |
| 3 | 單元的後面 |
| 4 | 單元的左面 |
| 5 | 單元的前面 |
| 6 | +X, –Y, +Z 的單元八分位,以單元中心為起點 |
| 7 | +X, +Y, +Z 的單元八分位,以單元中心為起點 |
| 8 | –X, –Y, +Z 的單元八分位,以單元中心為起點 |
| 9 | –X, +Y, +Z 的單元八分位,以單元中心為起點 |
| 10 | –X, –Y, –Z 的單元八分位,以單元中心為起點 |
| 11 | –X, +Y, –Z 的單元八分位,以單元中心為起點 |
| 12 | +X, –Y, –Z 的單元八分位,以單元中心為起點 |
| 13 | +X, +Y, –Z 的單元八分位,以單元中心為起點 |
連接性
磚塊需要互相連接以創建結構。您可以使用位掩碼來表示磚塊類型接觸單元的哪個面/邊。建築系統磚塊/物件的連接性由一系列連接點表示,這些連接點在單元的表面上排列如下:

如果建築系統物件在單元表面上共享至少 2 個連接點,那麼該物件被認為與另一個建築系統物件在網格中相連。
創建新磚塊類型
要創建一個新的磚塊類型:
將資產放置在 ReplicatedStorage/BuildingSystem/Assets 中。記住,它必須包含如上所定義的 ObjectType 和 StartingRotation 子元素。

例如,牆磚塊類型的表達如下:
ObjectTypeConfigurations.Wall = {ASSET_OFFSET_FROM_CENTER = Vector3.new(0, 0, -CELL_DIMENSIONS.Z / 2),CONNECTIVITY = 0xFF8000, -- 0b 111 111 111 000 000 000 000 000OCCUPANCY = 0x20, -- 0b 00 00 00 00 1 0 0 0 0 0}
與地形協作
如果您想創建一個與建築系統完美對齊的自由形式 地形 地圖,我們建議您使用在 環境地形 中概述的 高程圖導入 系統,並遵循以下細節:
Roblox 中的地形由三維的體素陣列表示,每個體素佔據世界中的 4×4×4 studs 的立方體。因此,Roblox Battle Royale 使用 20×16×20 studs 的網格單元大小,牆磚的大小是 20×16×1 studs,地板/天花板磚的大小是 20×1×20 studs。這樣可以使建築磚塊和地形正確對齊。
您的高程圖像中的每個像素應表示 X/Z 平面中的一個地形體素,因此 5×5 像素的區域表示佔據 20×20 studs 區域的一個建築系統網格單元。
在您的高程圖像中,確保每個像素的紅色通道或灰色通道值可以被您的建築系統網格單元的高度整除,以便地板磚能夠平穩地放置在地形上方。
當您導入高程圖時,請設置:
Position (X, Y, Z) = 0, 0, 0Size (X, Y, Z) = heightmap_width × 4, 256, heightmap_length × 4
