Roblox oferece as seguintes armas prefab para ajudar na criação de jogos competitivos baseados em combate. O sistema central apresenta armas baseadas em projéteis com uma câmera sobre o ombro, e definir a velocidade do projétil alta o suficiente pode simular armas de raycasting como pistolas a laser.

Para usar uma arma prefab em seu jogo:
Na página do item da arma, clique no botão Obter Modelo e confirme a transação.
No Studio, abra a Caixa de Ferramentas e selecione sua seção Inventário.

Localize a arma e clique nela para adicioná-la ao local. Quando solicitado se deseja colocar a ferramenta no pacote inicial, clique em Sim se quiser que os jogadores comecem com a arma em suas mochilas, ou clique em Não para simplesmente colocar a arma no mundo 3D como um item coletável.
Se esta for a primeira vez que você traz uma arma prefab, mova sua pasta WeaponsSystem para ServerScriptService para servir como a pasta do sistema unificada para todas as armas prefab no jogo.

Estrutura da pasta do sistema
A pasta WeaponsSystem é uma pasta unificada que contém ativos, configurações e scripts que alimentam todas as armas prefab no jogo. Se localizada em ServerScriptService, ela substitui quaisquer pastas WeaponsSystem equivalentes que possam residir dentro de armas individuais.

Dentro da pasta WeaponsSystem, diferentes aspectos são controlados pelos seguintes ModuleScripts:
| Aspecto | Gerenciado principalmente dentro de... |
|---|---|
| Funcionalidade das armas |
|
| Câmera sobre o ombro |
|
| GUI das Armas |
|
Estrutura da arma
Armas prefab são ferramentas e são nomeadas como aparecerão na mochila do jogador. Cada arma é estruturada com uma hierarquia semelhante.
Tipo de arma
O WeaponType StringValue corresponde ao ModuleScript para a arma na pasta WeaponsSystem/WeaponTypes. Os dois valores base são BulletWeapon e BowWeapon.
Modelo da arma
Cada arma contém um Model composto por uma ou mais BaseParts para formar a arma física. Uma dessas partes deve ser definida como a PrimaryPart do modelo.

O modelo também inclui os seguintes descendentes importantes que podem ser parentados a uma das BaseParts do modelo:
- HandleAttachment — Attachment cuja posição na BasePart pai determina onde o cabinho da ferramenta é soldado.
- Descendentes adicionais para quaisquer opções especializadas.
Configuração
A pasta Configuration contém tipos de "valor" específicos para o comportamento da arma. Além dos padrões, você pode adicionar itens de configuração adicionais para opções especializadas quando aplicável.

A seguir estão as configurações base e seus valores padrão:
| Item | Descrição | Padrão |
|---|---|---|
| AimTrack | Nome da faixa de animação de mira em Assets/Animations da pasta do sistema. | RifleAim |
| AimZoomTrack | Nome da faixa de animação de zoom de mira em Assets/Animations da pasta do sistema. | RifleAimDownSights |
| AmmoCapacity | Número de disparos em cada "carregador" antes que o jogador precise recarregar. Note que a munição é ilimitada e isso não especifica quanto de munição um jogador está carregando. | 30 |
| BulletSpeed | Velocidade que os projéteis viajam quando disparados. Definir isso para um valor muito alto como 20000 simula armas de raycasting como pistolas a laser. | 1000 |
| BurstShotCooldown | Tempo entre cada disparo em uma rajada; só importa se você definir FireMode para Burst. | Valor de ShotCooldown |
| FiredPlaybackSpeedRange | Quantidade que o tom pode variar para o som Fired da arma. Defina isso como 0 para sempre tocar no mesmo tom. | 0.1 |
| FireMode | Escolha entre Semiautomático (um disparo por clique/tap), Automático (disparo contínuo) ou Rajada (rajada de disparos igual a NumBurstShots em cada clique/tap). | Semiautomático |
| FullDamageDistance | Distância máxima que os disparos causarão dano total. Qualquer coisa atingida além dessa distância receberá menos e menos dano à medida que a distância se aproxima de ZeroDamageDistance. | 1000 |
| GravityFactor | Quantidade que a gravidade deve influenciar cada projétil. Por exemplo, esse valor para o Arco e Flecha é 1 porque as flechas fazem arco durante o voo, mas esse valor para o Lançador de Foguetes é 0 porque foguetes propelidos viajam em linha reta. | 0 |
| HasScope | Defina como true se você quiser usar a mira que está especificada na GUI das Armas. | false |
| HitDamage | Quantidade de dano que cada acerto direto causa. | 10 |
| MaxDistance | Distância máxima que os projéteis viajam antes de desaparecer. | 2000 |
| MaxSpread | Quantidade máxima de dispersão para a arma. | Valor de MinSpread |
| MinSpread | Quantidade mínima de dispersão para a arma. | 0 |
| NumBurstShots | Número de disparos por clique/rajada; só importa se você definir FireMode para Burst. | 3 |
| NumProjectiles | Número de projéteis que serão disparados ao mesmo tempo quando você clicar/tocar uma vez. Isso é útil para armas como a Espingarda que dispara múltiplos projéteis ao mesmo tempo. Note que um disparo sempre usará exatamente uma munição, independentemente deste valor. | 1 |
| RecoilDecay | Multiplicador de decaimento para recuo; essencialmente a taxa na qual o recuo diminui após o disparo. | 0.825 |
| RecoilDelayTime | Tempo de espera após disparar/clicar antes que o recuo seja adicionado à câmera. | 0.07 |
| RecoilMax | Máximo de recuo adicionado para cada disparo. | 0.5 |
| RecoilMin | Mínimo de recuo adicionado para cada disparo. | 0.05 |
| ReloadAnimation | Nome da faixa de animação de recarga em Assets/Animations da pasta do sistema. | RifleReload |
| ShotCooldown | Tempo mínimo de espera entre cliques. Para armas com FireMode de Automático, este também é o tempo entre disparos enquanto o botão de disparo está pressionado ou clicado. | 0.1 |
| StartupTime | Duração do tempo após equipar a arma antes que o jogador possa disparar. Isso impede que os jogadores disparem um único tiro de várias armas diferentes em rápida sucessão. | 0.2 |
| TotalRecoilMax | Máximo total de recuo acumulado. O recuo atual da arma nunca excederá este valor. | 2 |
| ZeroDamageDistance | Qualquer coisa atingida a esta distância ou além não receberá dano. | 10000 |
Opções especializadas
Você pode adicionar/modificar as seguintes opções para qualquer arma. Essas personalizações exigem a modificação do Model da arma, do Configuration da arma, ou de ambos. Algumas configurações dependem de outras, como partículas de boca que requerem os filhos necessários para efeitos e sons de projéteis/acertos.
Animações e sons do ferrolho
O ferrolho de uma arma é a parte que se move para frente e para trás cada vez que é disparada.
Descendentes do modelo da arma:
- Bolt — BasePart que se move quando a arma é disparada.
- BoltMotor — Motor6D usado para animar o ferrolho. Certifique-se de definir o Part0 do motor para a PrimaryPart do modelo da arma e Part1 para a parte Bolt.
- BoltMotorStart — Attachment cuja posição na BasePart pai determina onde o ferrolho está quando está em repouso.
- BoltMotorTarget — Attachment cuja posição na BasePart pai determina onde o ferrolho anima ao disparar.
Descendentes da pasta de configuração da arma:
- ActionOpenTimeopcional— Tempo que leva para o ferrolho animar para a posição aberta. O padrão é 0.025.
- ActionCloseTimeopcional— Tempo que leva para o ferrolho animar para a posição fechada. O padrão é 0.075.
Cascas de projéteis ejetadas
As armas podem incluir cascas de projéteis físicas que ejetam ao disparar e caem no chão.
Descendentes do modelo da arma:
- CasingEjectPoint — Attachment cuja posição na BasePart pai determina onde você deseja que as cascas de projéteis saiam. Note que sua orientação determina a direção que as cascas saem.
Descendentes da pasta de configuração da arma:
- CasingEjectSpeedMinopcional— Velocidade mínima de ejeção das cascas. O padrão é 15.
- CasingEjectSpeedMaxopcional— Velocidade máxima de ejeção das cascas. O padrão é 18.
Filho da BasePart da casca em Assets/Effects/Casings da pasta do sistema:
Efeitos e sons de projéteis/acertos
Você pode configurar projéteis físicos para qualquer arma, juntamente com Sounds, Beams, e ParticleEmitters para efeitos de acerto e outros efeitos especiais.
Descendentes da pasta de configuração da arma:
- ShouldMovePartopcional— Defina como true se o ShotEffect da arma deve se mover com o projétil ou false se não. Você deve definir isso como true apenas se houver um objeto visível que se move com cada disparo, como uma flecha ou foguete. O padrão é false.
- BeamFadeTimeopcional— Tempo que leva para Beam0 ou Beam1 (veja abaixo) desaparecerem após o projétil atingir algo. Por padrão, nenhum desvanecimento manual será aplicado pelo código. O padrão é 0.
- BeamWidth0opcional— Espessura de Beam0 ou Beam1 em Attachment0 (veja abaixo). O padrão é 1.5.
- BeamWidth1opcional— Espessura de Beam0 ou Beam1 em Attachment1 (veja abaixo). O padrão é 1.8.
- NumHitParticlesopcional— Número de partículas que o emissor HitParticles (veja abaixo) emitirá. O padrão é 3.
- HitParticlesUsePartColoropcional— Defina como true se você quiser que as partículas de acerto sejam da cor da superfície atingida; false se você quiser que as partículas de acerto não mudem de cor. O padrão é true.
Descendentes do ShotEffect especificado na seção acima:
- Beam0opcional— Primeiro slot para um Beam atrás do projétil. Não se esqueça de definir Attachment0 e Attachment1.
- Beam1opcional— Segundo slot para um Beam atrás do projétil. Não se esqueça de definir Attachment0 e Attachment1.
- Attachment0opcional— Attachment cuja posição na BasePart pai determina a parte de trás dos feixes; certifique-se de definir Beam.Attachment0 em ambos Beam0 e Beam1 para isso.
- Attachment1opcional— Attachment cuja posição na BasePart pai determina a frente dos feixes; certifique-se de definir Beam.Attachment1 em ambos Beam0 e Beam1 para isso.
- TrailParticlesopcional— ParticleEmitter parentado como um filho direto de Attachment0; isso emitirá enquanto o projétil estiver viajando.
- LeadingParticlesopcional— ParticleEmitter parentado como um filho direto de Attachment1; isso emitirá enquanto o projétil estiver viajando.
- HitEffectopcional— Attachment cuja posição será definida como Beam.Attachment1 de Beam0 quando o projétil atingir. Você deve especificar Beam0 e seus anexos para que isso funcione corretamente.
- HitSoundopcional— Sound parentado como um filho direto de HitEffect; toca quando o projétil atinge.
- HitParticlesopcional— Sound parentado como um filho direto de HitEffect; emite quando o projétil atinge.
- Meshopcional— SpecialMesh que você deseja que apareça como um projétil físico. Certifique-se de definir ShouldMovePart na configuração da arma como true se você tiver um objeto visível aqui.
Partículas de boca
Esta opção emite partículas do ParticleEmitter especificado no TipAttachment Attachment da arma quando é disparada. Descendentes da pasta de configuração da arma incluem:
- ShotEffect — Nome de um efeito de disparo armazenado em WeaponsSystem/Assets/Effects/Shots. Como filho deste efeito de disparo, inclua um ativo ParticleEmitter chamado MuzzleParticles.
- NumMuzzleParticlesopcional— Número de partículas de boca que serão emitidas. O padrão é 50.
Flash de boca
Esta opção cria um efeito de flash Beam quando a arma é disparada.
Descendentes do modelo da arma:
- MuzzleFlash0 — Attachment usado para especificar um lado do flash de boca. A posição não importa.
- MuzzleFlash1 — Attachment usado para especificar o lado oposto do flash de boca. A posição não importa.
- MuzzleFlash — Beam para o efeito de flash de boca. Certifique-se de definir o Attachment0 do feixe para MuzzleFlash0 e Attachment1 para MuzzleFlash1.
Descendentes da pasta de configuração da arma:
- MuzzleFlashTimeopcional— Duração do tempo que o flash de boca será exibido. O padrão é 0.03.
- MuzzleFlashSize0opcional— Tamanho mínimo do flash de boca. O padrão é 1.
- MuzzleFlashSize1opcional— Tamanho máximo do flash de boca. O padrão é 1.
Trilhas de partículas
Esta opção cria uma trilha de comprimento variável da arma até o ponto de impacto do projétil. Descendentes da pasta de configuração da arma incluem:
- TrailLengthopcional— Comprimento da trilha atrás do projétil; o padrão é nil, o que significa que o comprimento da trilha será calculado usando TrailLengthFactor.
- TrailLengthFactoropcional— Se especificado, o comprimento da trilha será definido como este valor multiplicado pela distância que o projétil viajou no último quadro; o padrão é 1. Note que isso será substituído se você incluir TrailLength.
- ShowEntireTrailUntilHitopcional— Defina como true para renderizar a trilha da ponta da arma até onde o projétil estiver; isso substituirá tanto TrailLength quanto TrailLengthFactor e a trilha só desaparecerá uma vez que o projétil atinja algo. Defina como false para usar uma das duas opções acima para calcular o comprimento da trilha. O padrão é false.
Marcas de impacto
Esta adição visual aparece na superfície onde os projéteis atingem e é útil para flechas, buracos de bala, marcas de queimadura, etc. Descendentes da pasta de configuração da arma incluem:
- HitMarkEffectopcional— Nome de um efeito de marca de impacto Part/MeshPart/SpecialMesh armazenado em WeaponsSystem/Assets/Effects/HitMarks. O padrão é BulletHole.
- AlignHitMarkToNormalopcional— Defina como true se a marca de impacto deve sempre se alinhar plana contra a superfície como um buraco de bala, ou false se a marca de impacto deve aparecer presa na superfície na direção de onde o projétil veio (como uma flecha). O padrão é true.
Como observado pelo HitMarkEffect acima, você pode adicionar uma parte/malha dentro de WeaponsSystem/Assets/Effects/HitMarks para aparecer como um projétil físico. Por exemplo, incluir uma MeshPart de flecha e definir AlignHitMarkToNormal como false fará com que a flecha se projete para fora da superfície na direção em que você a disparou. Esta Part/MeshPart/SpecialMesh pode conter os seguintes descendentes:
- Glowopcional— Decal que aparece na superfície atingida totalmente opaco, depois rapidamente se torna mais transparente, como um efeito brilhante na superfície que desaparece rapidamente. Útil para mostrar uma marca vermelha brilhante onde explosivos atingem.
- BulletHoleopcional— Decal que aparece na superfície atingida totalmente opaco e, após 4 segundos, desaparece para transparente ao longo de 1 segundo.
- ImpactBillboardopcional— BillboardGui que é exibido na superfície atingida, sempre voltado para a câmera.
- Impactopcional— ImageLabel como um filho direto de ImpactBillboard; isso começa totalmente opaco, cresce até o tamanho total do ImpactBillboard em 0.1 segundos, depois encolhe para metade do seu tamanho e desaparece para total transparência em 0.1 segundos.
Projéteis explosivos
Projéteis podem incluir um objeto Explosion para causar dano a personagens jogadores em uma área ao redor do ponto de impacto. Descendentes da pasta de configuração da arma incluem:
- ExplodeOnImpactopcional— Defina como true se você quiser que os projéteis da arma explodam ao atingir, false caso contrário. O padrão é false.
- BlastDamageopcional— Dano causado às coisas no centro da explosão. Note que a explosão causa menos dano quanto mais longe os objetos atingidos estão do centro da explosão. O padrão é 100.
Arma de carga
Uma arma de carga como o Railgun deve ser carregada entre disparos antes que possa disparar novamente.
Descendentes do modelo da arma:
- Dischargingopcional— Sound que toca enquanto a arma está descarregando, por exemplo, se você carregar a arma apenas parcialmente e soltar o botão de disparo.
- ChargeGlowopcional— BasePart que ficará menos transparente à medida que a arma carrega, de modo que ficará totalmente opaco a 100% de carga.
- ChargeCompleteParticlesopcional— ParticleEmitter que emite quando a arma termina de carregar. Este emissor pode ser um filho de qualquer modelo BasePart ou um filho de um Attachment dentro da BasePart.
- DischargeCompleteParticlesopcional— ParticleEmitter que emite quando a arma é completamente descarregada. Este emissor pode ser um filho de qualquer modelo BasePart ou um filho de um Attachment dentro da BasePart.
- ChargingParticlesopcional— ParticleEmitter que emite enquanto a arma está carregando. Você pode incluir múltiplos emissores com este nome e cada um emitirá enquanto estiver carregando. Este emissor pode ser um filho de qualquer modelo BasePart ou um filho de um Attachment dentro da BasePart.
Descendentes da pasta de configuração da arma:
- ChargeRate — Taxa na qual a arma carregará. Este valor deve ser especificado para indicar que a arma usa carga.
- DischargeRateopcional— Taxa na qual a arma descarregará. O padrão é 0, o que significa que a arma não descarregará de forma alguma.
- ChargePassivelyopcional— Defina como true se você quiser que a arma carregue passivamente para que dispare instantaneamente quando você clicar, ou false se você quiser clicar/tocar para carregar a arma e fazê-la disparar uma vez que a carga total seja alcançada. O padrão é false.
- ChargingParticlesRatePerChargeopcional— Número de partículas que serão emitidas de todos os emissores ChargingParticles multiplicado pela carga atual da arma. O padrão é 20, o que significa que se a carga da arma estiver em 10%, cada emissor ChargingParticles emitirá 2 partículas (20*0.1), e se a carga da arma estiver em 90%, cada emissor emitirá 18 partículas (20*0.9).
- FireDischargeopcional— Quantidade de carga que a arma perderá após disparar um tiro totalmente carregado. O padrão é 1.
- NumChargeCompleteParticlesopcional— Número de partículas que o emissor ChargeCompleteParticles emitirá uma vez que a arma estiver totalmente carregada. O padrão é 25.
- NumDischargeCompleteParticlesopcional— Número de partículas que o emissor DischargeCompleteParticles emitirá quando a arma estiver completamente descarregada. O padrão é 25.
Arma de arco
Uma arma de arco como o Arco e Flecha pode incluir uma construção realista de corda e braços, bem como uma flecha visual encaixada na corda.
Além de adicionar descendentes ao modelo, você precisa aplicar o seguinte:
- Transforme a arma em uma arma de carga. Por exemplo, adicione a ChargeRate necessária dentro da Configuration da arma que especifica quão rápido a corda é puxada. Além disso, considere adicionar descendentes opcionais ao Model da arma, como um som de Charging para a corda/brasos sendo puxados.
Descendentes do modelo da arma incluem:
- Arrowopcional— BasePart para a flecha que aparece quando o arco está totalmente puxado. Note que isso é apenas para aparência visual no arco (a flecha realmente disparada será um ShotEffect conforme descrito em efeitos e sons de projéteis/acertos).
- String1 — Attachment para o ponto central da corda.
- Armsopcional— Part que serve apenas como um indicador interno de que os braços do arco serão animados. Isso pode conter os seguintes filhos diretos:
- LeftString0 — Attachment ponto onde o lado esquerdo da corda está preso ao arco.
- RightString0 — Attachment ponto onde o lado direito da corda está preso ao arco.
- Mesh — SpecialMesh parte do arco que realmente se dobrará quando o arco for puxado. Note que você deve especificar os seguintes quatro objetos Vector3Value para fazer isso animar.
GUI das Armas
O sistema central de armas interage com este sistema para atualizar a GUI com base em coisas como dispersão da arma, indicadores para quando você é atingido ou atinge outros, etc.
O WeaponsSystemGui é um objeto ScreenGui em WeaponsSystem/Assets que é parentado ao PlayerGui quando o jogo começa. O WeaponSystemGui tem quatro descendentes conforme segue:
ScalingElements é uma Folder com os seguintes descendentes:
- Crosshair — Uma Frame contendo um UIAspectRatioConstraint e rótulos de imagem para os elementos inferior, esquerdo, direito e superior da mira.
- HitMarker — Uma Frame contendo um UIAspectRatioConstraint e um rótulo de imagem HitMarkerImage que aparece e desaparece quando o jogador atinge com sucesso outro personagem jogador.
LargeTouchscreen é uma Frame contendo os botões AimButton e FireButton que são exibidos em grandes telas sensíveis ao toque.
Scope é uma Frame que contém o rótulo de imagem ScopeImage que aparece ao ampliar em uma arma com HasScope ativado (veja estrutura da arma).
SmallTouchscreen é uma Frame contendo os botões AimButton e FireButton que são exibidos em pequenas telas sensíveis ao toque.
Indicadores direcionais
Os indicadores direcionais são usados para mostrar a direção de algo ao redor da mira do jogador. Por exemplo, se alguém atirar em você, um semicírculo vermelho pode aparecer ao redor da sua mira na direção de onde o tiro veio. Outros exemplos incluem indicadores para mostrar a direção de passos, tiros indiretos ou até mesmo objetos ambientais como baús.
Para criar um novo indicador, adicione uma nova Frame em WeaponsSystemGui/ScalingElements/DirectionalIndicators com a seguinte estrutura:
- Indicador (Frame)
- ImageLabel para o indicador direcional. Ajustar a rotação da imagem no Studio pode ser necessário, a menos que você faça o upload da imagem de forma que esteja voltada para baixo e haja pouco ou nenhum espaço em branco ao redor dela. Este rótulo de imagem também deve conter seu próprio UIAspectRatioConstraint.
- Configuration contendo propriedades opcionais para ajustar:
- DistanceLevelFromCenteropcional— Número de níveis de distância do centro da tela (cada nível de distância é cerca de 0.03 de escala de tela). O padrão é 6.
- FadeTimeopcional— Tempo de desvanecimento do indicador após sua ativação e o tempo TimeBeforeFade. O padrão é 1.
- Nameopcional— Nome do indicador direcional como você deseja referenciá-lo no código. O padrão é o nome do Frame de nível superior do indicador.
- TimeBeforeFadeopcional— Número de segundos que o indicador aparecerá antes de desaparecer. O padrão é 1.
- TransparencyBeforeFadeopcional— Transparência do indicador antes de começar a desaparecer. O padrão é 0.
- WidthLevelopcional— Número de níveis de largura a partir do centro (cada nível de largura é cerca de 0.03 de escala de tela). O padrão é o valor de DistanceLevelFromCenter.
Uma vez criado, você pode ativar um indicador através do seguinte comando dentro de WeaponsSystem/Libraries/WeaponsGui, onde indicatorName é o nome da string do indicador a ser ativado e worldPos é a posição no mundo onde o indicador direcional deve apontar:
self.DirectionalIndicatorGuiManager:ActivateDirectionalIndicator(indicatorName, worldPos)Painel de dano
O painel de dano é usado para mostrar números acima da cabeça de um personagem quando ele é danificado. Esses números só aparecerão para o jogador que danificou o personagem de outro jogador, não para jogadores que estão assistindo.
Os painéis de dano são gerenciados em WeaponsSystem/Libraries/DamageBillboardHandler e podem ser ativados a partir de qualquer código do lado do cliente da seguinte forma, onde damage é a quantidade de dano causado e adornmentPart é a parte na qual adornar o painel, como a cabeça da vítima:
DamageBillboardHandler:ShowDamageBillboard(damage, adornmentPart)Câmera sobre o ombro
A câmera sobre o ombro é uma câmera em terceira pessoa que olha sobre o ombro direito do personagem jogador. Para personalizar a câmera sobre o ombro, modifique as variáveis sob o comentário -- Parâmetros de configuração (constantes) na função ShoulderCamera.new() de WeaponsSystem/Libraries/ShoulderCamera. Você pode modificar coisas como campo de visão, deslocamento em relação ao personagem, velocidade de caminhada enquanto correndo ou ampliando, etc.
Correr e ampliar
Por padrão, o sistema de armas adiciona a capacidade de "correr" para que os jogadores possam correr segurando a tecla Shift, empurrando totalmente para cima no thumbstick dinâmico (móvel) ou empurrando totalmente para cima no joystick esquerdo (gamepad). Se você quiser desativar a corrida, defina o valor de SprintEnabled dentro de WeaponsSystem/Configuration como false.
O sistema também reduz a velocidade do jogador enquanto ele está mirando/ampliando, mas você pode desativar esse comportamento definindo o valor de SlowZoomWalkEnabled dentro de WeaponsSystem/Configuration como false.








