Roblox Battle Royale具有一个建筑系统,允许用户建造自己的结构,以便达到更高的地面,获得更好的射击角度,或者在战斗中提供掩护。通过使用菜单,用户可以从多个不同的瓦片类型中进行选择,并将它们放置在世界中。

为了保持系统的有序和结构化:
- 每个瓦片必须连接到另一个现有瓦片或地面。
- 将所有建筑瓦片放置在与3D世界协调的网格中,以确保瓦片正确连接且不重叠。
瓦片组成
为了让用户能够快速轻松地建立新瓦片,建筑系统需要理解哪些瓦片彼此连接,以及新瓦片可以在网格上放置的位置。
瓦片使用3个组件:用作瓦片对象的视觉资产,关于瓦片在相对于其他世界对象时所占空间的信息(占用),以及允许附加瓦片连接到可用边缘的瓦片连接点。
资产
资产是一个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方块。因此,Roblox Battle Royale使用20×16×20方块的网格单元,墙瓦片大小为20×16×1方块,地板/天花板瓦片大小为20×1×20方块。这样可以确保建筑瓦片和地形能够正确对齐。
您的高度图像中,每个像素应该在X/Z平面上表示一个地形体素,因此5×5的像素区域表示占据20×20方块区域的一个建筑系统网格单元。
在您的高度图像中,确保每个像素的红色通道或灰色通道值是建筑系统网格单元高度的倍数,以便地板瓦片能够很好地放置在地形上。
导入高度图时,请设置:
Position (X, Y, Z) = 0, 0, 0Size (X, Y, Z) = heightmap_width × 4, 256, heightmap_length × 4
