Roblox Battle Royale possui um sistema de construção que permite aos usuários construir suas próprias estruturas para alcançar terrenos mais altos para um melhor ângulo de tiro, ou para fornecer cobertura durante a batalha. Usando um menu, o usuário pode selecionar entre vários tipos de piso e colocá-los no mundo.

Para manter um sistema ordenado e estruturado:
- Cada piso deve se conectar a outro piso existente ou ao chão.
- Coloque todos os pisos de construção dentro de uma grade coordenada com o mundo 3D, de modo que os pisos se conectem corretamente e não se sobreponham.
Composição do piso
Para que os usuários possam construir novos pisos de forma rápida e fácil, o sistema de construção precisa entender quais pisos estão conectados entre si e onde novos pisos podem ser colocados na grade.
Os pisos usam 3 componentes: o ativo visual que é usado como o objeto do piso, informações sobre o espaço ocupado pelo piso em referência a outros objetos do mundo, e os pontos de conexão de um piso que permitem que pisos adicionais se conectem às bordas disponíveis.
Ativo
Um ativo é um BasePart (Part, MeshPart, etc.) colocado em ReplicatedStorage/BuildingSystem/Assets representando como o piso se parece no mundo 3D. Este BasePart deve ter dois filhos:
- StartingRotation — Um NumberValue com um Value da rotação inicial do piso quando um usuário o coloca no mundo.
Ocupação
Garantir que um piso ocupe a localização correta em um sistema de grade é importante e pode ser feito usando uma máscara de bits. Uma máscara de bits representa o espaço físico que o tipo de piso ocupa dentro de uma seção básica do espaço do mundo ou célula. Cada piso/objeto do sistema de construção pode ocupar qualquer número de faces de uma célula de grade (frente, esquerda, trás, direita, cima e baixo) e qualquer número de octantes em uma célula de grade. Um usuário só pode colocar um objeto do sistema de construção em uma célula se todas as faces e octantes que o objeto ocupa estiverem disponíveis nessa célula. A ocupação de um objeto do sistema de construção é definida da seguinte forma:
| Índice do bit | Significado |
|---|---|
| 0 | Face inferior da célula |
| 1 | Face superior da célula |
| 2 | Face direita da célula |
| 3 | Face traseira da célula |
| 4 | Face esquerda da célula |
| 5 | Face frontal da célula |
| 6 | +X, –Y, +Z octante da célula com origem no centro da célula |
| 7 | +X, +Y, +Z octante da célula com origem no centro da célula |
| 8 | –X, –Y, +Z octante da célula com origem no centro da célula |
| 9 | –X, +Y, +Z octante da célula com origem no centro da célula |
| 10 | –X, –Y, –Z octante da célula com origem no centro da célula |
| 11 | –X, +Y, –Z octante da célula com origem no centro da célula |
| 12 | +X, –Y, –Z octante da célula com origem no centro da célula |
| 13 | +X, +Y, –Z octante da célula com origem no centro da célula |
Conectividade
Os pisos precisam se conectar entre si para criar uma estrutura. Você pode usar uma máscara de bits que representa quais porções das faces/bordas da célula o tipo de piso toca. A conectividade de um piso/objeto do sistema de construção é representada por uma série de pontos de conexão, bits, na superfície de uma célula. Eles se organizam da seguinte maneira nas faces da célula:

Um objeto do sistema de construção é considerado conectado a outro objeto do sistema de construção na grade se eles compartilharem pelo menos 2 pontos de conectividade na superfície de uma célula.
Criar novos tipos de pisos
Para criar um novo tipo de piso:
Coloque o ativo em ReplicatedStorage/BuildingSystem/Assets. Lembre-se de que deve conter os filhos ObjectType e StartingRotation conforme definido acima.

Defina a Ocupação e a Conectividade para o seu novo tipo de piso em ReplicatedStorage/BuildingSystem/Libraries/Grid/ObjectTypeConfigurations:

Por exemplo, o tipo de piso Parede é expresso da seguinte forma:
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}
Trabalhar com terreno
Se você deseja criar um mapa com terreno de forma livre que se alinha perfeitamente com o sistema de construção, recomendamos que você use o sistema de importação de mapa de altura conforme descrito em Terreno Ambiental e que você observe os seguintes detalhes:
O terreno no Roblox é representado por um array tridimensional de voxels, cada um dos quais ocupa um cubo de 4×4×4 studs no mundo. Por causa disso, o Battle Royale do Roblox usa um tamanho de célula de grade de 20×16×20 studs, com pisos de parede que têm 20×16×1 studs e pisos/tetos que têm 20×1×20 studs de tamanho. Isso permite que os pisos de construção e o terreno se alinhem corretamente.
Cada pixel na sua imagem do mapa de altura deve representar um voxel de terreno no plano X/Z, então uma área de 5×5 pixels representa uma célula de grade do sistema de construção que ocupa uma área de 20×20 studs.
Na sua imagem do mapa de altura, certifique-se de que o valor do canal vermelho ou do canal cinza para cada pixel seja divisível pela altura da célula de grade do seu sistema de construção para que os pisos se assentem corretamente sobre o terreno.
Quando você importar seu mapa de altura, defina:
Position (X, Y, Z) = 0, 0, 0Size (X, Y, Z) = heightmap_width × 4, 256, heightmap_length × 4