建筑系统

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

Roblox战斗皇家包含一个允许用户建造自己结构以达到更好射击角度或在战斗中提供掩护的建筑系统。使用菜单,用户可以从多种不同的瓷砖类型中选择,并将它们放置在世界上。

Building Example

为了维持有序和结构化的系统:

  • 每块地砖都必须连接到另一个现有地砖或地面。
  • 将所有建筑瓷片放置在与游戏世界协调的网格内,以确保瓷片正确连接且不重叠。

地砖组成

为了让用户快速轻松地构建新的地砖,建筑系统需要了解哪些地砖之间相连以及新地砖可以放置在网格上的位置。

地砖使用 3 个组件:用作地砖对象的 视觉资产 ,用于描述地砖占用的 空间 对其他世界对象,以及地砖连接点 的连接点,可以允许额外的地砖连接到可用的边缘。

资产

资产是一个 BasePart ( Part , MeshPart ,等) 放置在 ReplicatedStorage/BuildingSystem/Assets 中,代表地砖在游戏世界中的外观。这 BasePart 必须有两个孩子:

  • 对象类型 — 一个 StringValue 与瓷砖类型名称相同的 Value
  • 开始旋转 — 当用户将其放置在世界上时, 一个 NumberValue 与瓷瓦片的初始旋转有 Value 当启动旋转时。

占用率

确保瓷砖在网格系统中占用正确位置很重要,可以使用位面具来实现。位元面具表示地砖类型在世界空间或细胞的基本部分占用的物理空间或细胞。每个建筑系统地砖/对象可以占用网格细胞的任何面(前、左、返回、右、顶和底)以及网格细胞的任何八分之一数量。用户只能将建筑系统对象放置在一个细胞中,如果该对象占用的所有面和八角都可用于该细胞。建筑系统对象的占用率定义如下:

比特索引意义
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 细胞的八角形位置,起源于细胞中心

连接性

瓷砖需要相互连接以创建结构。您可以使用代表瓷砖类型触摸的细胞面/边缘部分的位置面具。建筑系统地砖/对象的连接性由一系列连接点、比特表示,在细胞表面。他们在细胞的面上按照以下方式排列:

Octant Cube Diagram

建筑系统对象被认为与网格中的另一个建筑系统对象相连,如果它们在细胞表面上共享至少 2 个连接点。

创建新的瓷砖类型

要创建新的瓷砖输入:

  1. 将资产放置在 ReplicatedStorage/BuildingSystem/Assets 。请记住,它必须包含上面定义的 ObjectTypeStartingRotation 子元素。

    Battle Royale Weapon Example
  2. 中为新的瓷砖类型定义占用ReplicatedStorage/BuildingSystem/Libraries/Grid/ObjectTypeConfigurations

    Battle Royale Weapon Example

例如, 瓷砖类型表达如下:


ObjectTypeConfigurations.Wall = {
ASSET_OFFSET_FROM_CENTER = Vector3.new(0, 0, -CELL_DIMENSIONS.Z / 2),
CONNECTIVITY = 0xFF8000, -- 0b 111 111 111 000 000 000 000 000
OCCUPANCY = 0x20, -- 0b 00 00 00 00 1 0 0 0 0 0
}

与地形工作

如果您想创建一张地图,其地形完全与建筑系统匹配,我们建议您使用 《环境地形》 中描述的 《高度地图导入》 系统,并观察以下细节:

  • Roblox 中的地形由三维阵列的体素组成,每个体素占用世界中 4×4×4 格的立方体。因此,Roblox战斗皇室使用 20×16×20 格子细胞尺寸,墙砖为 20×16×1 格,地板/天花板砖为 20×1×20 格。这允许建筑瓷砖和地形正确排列。

  • 你高度图像中的每个像素都应该代表 X/Z 平面中的一个地形体积,因此 5×5 像素区域代表一个占用 20×20 格的建筑系统网格细胞。

  • 在你的高度图像中,确保每个像素的红色通道或灰色通道值与你的建筑系统网格细胞的高度相等,以便地板砖整齐地坐在地形上。

  • 当你导入高度图时,设置:


    Position (X, Y, Z) = 0, 0, 0
    Size (X, Y, Z) = heightmap_width × 4, 256, heightmap_length × 4