Roblox Battle Royale 具有一个建筑系统,允许用户建造他们自己的结构来达到更好的射击角度或提供覆盖。 使用菜单,用户可以从一系列不同的地砖类型中选择,并将它们放置在世界中。
要保持整洁和结构化的系统:
- 每个地砖必须连接到另一个现有地砖或地面。
- 将所有建筑瓷砖放置在网格中,与游戏世界协调,以便瓷砖之间连接得到正确连接,而不会重复。
瓷砖组合
为了让用户快速和轻松地建造新瓷砖,建筑系统需要了解哪些瓷砖连接在一起,并且在网格上放置新瓷砖的位置。
地砖使用 3 个组件:视觉资产,用作地砖对象,信息关于空间地砖占用在其他世界对象的参考,以及可以允许添加的地砖连接到可用边缘的连接点。
资产
资产是一个 BasePart ( Part , MeshPart , 等等) 放置在 1> ReplicatedStorage/BuildingSystem/Assets1> 代表游戏世界中的地砖的外观。 此 4> Class.BasePart4> 必须有两个子女:
- 对象类型 — 一个 StringValue 用于地砖类型名称的 Value 。
入住率
确保地砖在网格系统中的正确位置是重要的,可以使用 bitmask 来实现。 bitmask 代表物理空间,该地砖类型在基本世界空间(前、左、返回、右、顶、边)和网格细胞中占用的位置。 每个建筑系统的地��
位索 | 意义 |
---|---|
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 八角形电池,起始位于电池中心 |
连接性
瓷砖需要连接到一起以创建结构。 您可以使用一个 bitMask 来表示瓷砖类型触摸到的部分面/边的位置。 建筑系统瓷砖/对象的连接性是由一系列连接点、位子、在瓷砖表面上表示的。 它们在瓷砖面上排列如下:
如果建筑系统对象与网格上的其他建筑系统对象共享至少 2 个连接点,它们将被视为连接到另一个建筑系统对象在表面上的两个连接点。
创建新的地砖类型
要创建一个新的地砖类输入:
将资产放置在 ReplicatedStorage/BuildingSystem/Assets 中。请记住它必须包含 ObjectType 和 StartingRotation 子集,如上所定义。
为您的新地砖类型在 ReplicatedStorage/BuildingSystem/Libraries/Grid/ObjectTypeConfigurations 中定义 Occupancy 和 ReplicatedStorage/BuildingSystem/Libraries/Grid/ObjectTypeConfigurations:
例如, 墙 地砖类型的表达如下所示:
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 中的地形由三个维度的阵列 of 体素表示,其中每个体素的大小都是 4×4×4 格。因此,Roblox Battle Royale 使用网格大小为 20×16×20 格,墙壁瓷砖的大小为 20×16×20 格,楼板瓷砖的大小为 20×1×
您的高度地图图像中的每个像素都应该代表一个地形体素在 X/Z 平面,因此 5×5 区域在像素中代表一个建筑系统网格细胞,占用 20×20 格子区域。
在您的高度地图图像中,请确保每个像素的红色通道或灰色通道值与您的建筑系统网格格子的高度为分割,以便屋顶瓷砖能够正确地坐落在地形上。
当你导入你的高度地图时,设置:
Position (X, Y, Z) = 0, 0, 0Size (X, Y, Z) = heightmap_width × 4, 256, heightmap_length × 4