Para ayudar a crear experiencias competitivas basadas en combate, hay varias armas aprobadas disponibles para su uso en cualquier experiencia. El sistema central cuenta con armas basadas en proyectiles con una cámara sobre el hombro, y al establecer la velocidad del proyectil lo suficientemente alta se pueden simular armas de raycasting como las pistolas láser.

Para usar un arma aprobada en tu experiencia:
- Selecciona un arma de abajo, navegando al enlace de la biblioteca de activos.
En la página del artículo del arma, haz clic en el botón verde Obtener y confirma la transacción.
En Studio, abre el Toolbox.
Selecciona la sección Inventario de tu toolbox.
Localiza el arma y haz clic en ella para agregarla al lugar. Cuando se te pregunte si deseas colocar la herramienta en el paquete inicial, haz clic en Sí si deseas que los jugadores comiencen con el arma en su mochila, o haz clic en No para simplemente colocar el arma en el mundo 3D como un objeto recogible.
Si esta es la primera vez que incorporas un arma aprobada, mueve la carpeta WeaponsSystem a ServerScriptService para que sirva como la carpeta unificada del sistema para todas las armas aprobadas en la experiencia.

Estructura de la carpeta del sistema
La carpeta WeaponsSystem es una carpeta unificada que contiene activos, configuraciones y scripts que alimentan todas las armas aprobadas en la experiencia. Si se encuentra en ServerScriptService, anula cualquier carpeta equivalente WeaponsSystem que pueda residir dentro de armas individuales.

La carpeta WeaponsSystem contiene las siguientes instancias:
- WeaponTypes (Folder) – Especifica todos los tipos de armas.
- ServerWeaponsScript (Script)
- Version (IntValue)
- ClientWeaponScript (LocalScript)
- NetworkingCallbacks (ModuleScript)
- WeaponData (RemoteEvent)
- WeaponsSystem (ModuleScript)
Dentro de la carpeta WeaponsSystem, diferentes aspectos son controlados por los siguientes ModuleScripts:
| Aspecto | Manejados principalmente dentro de... |
|---|---|
| Funcionalidad de armas |
|
| Cámara sobre el hombro |
|
| GUI de Armas |
|
Estructura del arma
Las armas aprobadas son Tools y están nombradas como aparecerán en la mochila del jugador. Cada arma está estructurada con una jerarquía similar.
Tipo de arma
El WeaponType StringValue corresponde con el ModuleScript para el arma en la carpeta WeaponsSystem/WeaponTypes. Los dos valores base son BulletWeapon y BowWeapon.
Modelo del arma
Cada arma contiene un Model compuesto por una o más BaseParts para formar el arma física. Uno de estos debe establecerse como la PrimaryPart del modelo.

El modelo también incluye los siguientes descendientes importantes que pueden ser padres de uno de los BaseParts del modelo:
- TipAttachment – Attachment cuya posición en el BasePart padre determina de dónde salen las balas/proyectiles.
- HandleAttachment – Attachment cuya posición en el BasePart padre determina dónde se suelda el Handle.
- Descendientes adicionales para cualquier opciones especializadas.
Mango del arma
La parte Handle determina dónde un personaje jugador sostiene el arma. Esto debe ser un Part, debe llamarse Handle y debe ser un hijo directo del arma (herramienta).
Carpeta de configuración
La carpeta Configuration contiene tipos de "valor" específicos para el comportamiento del arma. Más allá de los valores predeterminados, puedes añadir elementos de configuración adicionales para opciones especializadas cuando sea aplicable.
A continuación se presentan las configuraciones base y sus valores predeterminados:
| Elemento | Descripción | Predeterminado |
|---|---|---|
| AmmoCapacity | Número de disparos en cada "clip de munición" antes de que el jugador deba recargar. Ten en cuenta que la munición es ilimitada y esto no especifica cuántas municiones lleva un jugador. | 30 |
| FireMode | Elige entre Semiautomático (un disparo por clic/tap), Automático (disparo continuo) o Ráfaga (ráfaga de disparos igual a NumBurstShots en cada clic/tap). | Semiautomático |
| ShotCooldown | Tiempo mínimo de espera entre clics. Para armas con FireMode de Automático, este también es el tiempo entre disparos mientras se presiona el botón de disparo o manteniendo clic. | 0.1 |
| BurstShotCooldown | Tiempo entre cada disparo en una ráfaga; solo importa si estableces FireMode en Ráfaga. | Valor de ShotCooldown |
| NumBurstShots | Número de disparos por clic/ráfaga; solo importa si estableces FireMode en Ráfaga. | 3 |
| HitDamage | Cantidad de daño que hace cada impacto directo. | 10 |
| FullDamageDistance | Distancia máxima a la que los disparos harán daño total. Cualquier cosa golpeada más allá de esta distancia recibirá menos daño a medida que la distancia se acerque a ZeroDamageDistance. | 1000 |
| ZeroDamageDistance | Cualquier cosa golpeada en o más allá de esta distancia no recibirá daño. | 10000 |
| BulletSpeed | Velocidad a la que viajan las balas/proyectiles cuando se disparan. Establecer esto a un valor muy alto como 20000 simula armas de raycasting como las pistolas láser. | 1000 |
| MaxDistance | Distancia máxima a la que las balas/proyectiles viajan antes de desaparecer. | 2000 |
| MinSpread | Cantidad mínima de dispersión para el arma. | 0 |
| MaxSpread | Cantidad máxima de dispersión para el arma. | Valor de MinSpread |
| GravityFactor | Cantidad que la gravedad debe influir en cada bala/proyectil. Por ejemplo, este valor para la Ballesta es 1 porque las flechas se arquean durante el vuelo, pero este valor para el Lanzacohetes es 0 porque los cohetes propulsados viajan en línea recta. | 0 |
| HasScope | Establecer en true si deseas usar la mira que se especifica en el GUI del Sistema de Armas. | false |
| ReloadAnimation | Nombre de la pista de animación de recarga en Assets/Animations de la carpeta del sistema. | RifleReload |
| AimTrack | Nombre de la pista de animación de apuntar en Assets/Animations de la carpeta del sistema. | RifleAim |
| AimZoomTrack | Nombre de la pista de animación de zoom de apuntar en Assets/Animations de la carpeta del sistema. | RifleAimDownSights |
| RecoilMin | Recoil mínimo agregado por cada tiro. | 0.05 |
| RecoilMax | Recoil máximo agregado por cada tiro. | 0.5 |
| TotalRecoilMax | Recoil máximo acumulado total. El recoil actual del arma nunca superará este valor. | 2 |
| RecoilDecay | Multiplicador de disminución para el recoil; esencialmente la tasa a la que el recoil disminuye después de disparar. | 0.825 |
| RecoilDelayTime | Tiempo de espera después de disparar/clicar antes de que se añada el recoil a la cámara. | 0.07 |
| StartupTime | Tiempo necesario después de equipar el arma antes de que el jugador pueda disparar. Esto evita que los jugadores disparen un solo tiro desde múltiples armas diferentes en rápida sucesión. | 0.2 |
| FiredPlaybackSpeedRange | Cantidad que el tono puede variar para el sonido Fired del arma. Establecer esto en 0 reproducirá siempre el sonido con el mismo tono. | 0.1 |
| NumProjectiles | Número de balas/proyectiles que se dispararán al mismo tiempo cuando hagas clic/tap una vez. Esto es útil para armas como la Escopeta que dispara múltiples balas al mismo tiempo. Tenga en cuenta que un disparo siempre utilizará exactamente una munición, independientemente de este valor. | 1 |
Opciones especializadas
Puedes añadir/modificar las siguientes opciones para cualquier arma. Estas personalizaciones requieren modificar ya sea el Model del arma, la Configuration del arma, o ambas. Algunas configuraciones son dependientes de otras, como Muzzle Particles que requieren los hijos necesarios para los Efectos y Sonidos de Proyectiles / Golpes.
Animaciones y sonidos del bolt
El bolt de un arma es la parte que se mueve hacia adelante y hacia atrás cada vez que se dispara.
- Descendientes del Modelo del Arma
| Bolt | BasePart que se mueve cuando se dispara el arma. | |
| BoltMotor | Motor6D utilizado para animar el bolt. Asegúrate de establecer el Part0 del motor al PrimaryPart del modelo del arma y Part1 a la parte Bolt. | |
| BoltMotorStart | Attachment cuya posición en el BasePart padre determina dónde está el bolt cuando está en reposo. | |
| BoltMotorTarget | Attachment cuya posición en el BasePart padre determina dónde se anima el bolt al disparar. | |
| BoltOpenSound | Sound que se reproduce cuando el bolt se abre. | optional |
| BoltCloseSound | Sound que se reproduce cuando el bolt se cierra. | optional |
- Hijos de la carpeta Configuración del arma
| Elemento | Descripción | Predeterminado |
|---|---|---|
| ActionOpenTime | Tiempo que tarda el bolt en animarse a la posición abierta. | 0.025 |
| ActionCloseTime | Tiempo que tarda el bolt en animarse a la posición cerrada. | 0.075 |
Eyectar casquillos de bala
Las armas pueden incluir casquillos de bala físicos que se eyectan al disparar y caen al suelo.
- Descendientes del Modelo del Arma
| CasingEjectPoint | Attachment cuya posición en el BasePart padre determina dónde deseas que salgan los casquillos de bala. Ten en cuenta que su orientación determina la dirección en la que salen los casquillos. |
- Hijos de la carpeta Configuración del arma
| Elemento | Descripción | Predeterminado |
|---|---|---|
| CasingEffect | Nombre del BasePart de casquillo en Assets/Effects/Casings de la carpeta del sistema. | |
| CasingEjectSpeedMin | Velocidad mínima de eyección de los casquillos | 15 |
| CasingEjectSpeedMax | Velocidad máxima de eyección de los casquillos | 18 |
| CasingHitSound | Sound que se reproduce cuando los casquillos golpean el suelo. | optional |
Efectos y sonidos de proyectiles/golpes
Puedes configurar proyectiles físicos para cualquier arma, junto con Sounds, Beams y ParticleEmitters para efectos de golpes y otros efectos especiales.
- Hijos de la carpeta Configuración del arma
| Elemento | Descripción | Predeterminado |
|---|---|---|
| ShotEffect | Nombre de un efecto de disparo almacenado dentro de Assets/Effects/Shots de la carpeta del sistema. | |
| ShouldMovePart | Establecer en true si el ShotEffect del arma debe moverse con el proyectil o false si no. Debes establecer esto en true solo si hay un objeto visible que se mueva con cada disparo, como una flecha o un cohete. | false |
| BeamFadeTime | Tiempo que tarda Beam0 o Beam1 (ver abajo) en desvanecerse después de que la bala/proyectil golpea algo. Por defecto, no se aplicará un desvanecimiento manual mediante código. | 0 |
| BeamWidth0 | Grosor de Beam0 o Beam1 en Attachment0 (ver abajo). | 1.5 |
| BeamWidth1 | Grosor de Beam0 o Beam1 en Attachment1 (ver abajo). | 1.8 |
| NumHitParticles | Número de partículas que el emisor de HitParticles (ver abajo) emitirá. | 3 |
| HitParticlesUsePartColor | Establecer en true si deseas que las partículas de impacto sean del color de la superficie golpeada; false si deseas que las partículas de impacto no cambien de color. | true |
Descendientes de ShotEffect
Descendientes del ShotEffect especificado en la sección anterior.
| Flying | Sound que se reproduce mientras la bala/proyectil está viajando. | optional |
| Beam0 | Primer lugar para un Beam detrás de la bala/proyectil. No olvides establecer Attachment0 y Attachment1. | optional |
| Beam1 | Segundo lugar para un Beam detrás de la bala/proyectil. No olvides establecer Attachment0 y Attachment1. | optional |
| Attachment0 | Attachment cuya posición en el BasePart padre determina la parte posterior de los haces que siguen; asegúrate de establecer Beam.Attachment0 en ambos Beam0 y Beam1 a esto. | optional |
| Attachment1 | Attachment cuya posición en el BasePart padre determina la parte delantera de los haces que siguen; asegúrate de establecer Beam.Attachment1 en ambos Beam0 y Beam1 a esto. | optional |
| TrailParticles | ParticleEmitter padre como un hijo directo de Attachment0; esto emitirá mientras la bala/proyectil está viajando. | optional |
| LeadingParticles | ParticleEmitter padre como un hijo directo de Attachment1; esto emitirá mientras la bala/proyectil está viajando. | optional |
| HitEffect | Attachment cuya posición se establecerá en Beam.Attachment1 de Beam0 cuando la bala/proyectil golpee. Debes especificar Beam0 y sus adjuntos para que esto funcione correctamente. | optional |
| HitSound | Sound padre como un hijo directo de HitEffect; se reproduce cuando la bala/proyectil golpea. | optional |
| HitParticles | Sound padre como un hijo directo de HitEffect; emite cuando la bala/proyectil golpea. | optional |
| [ProjectilePart] | Cualquier Part o MeshPart que quieras que aparezca como un proyectil físico. Asegúrate de establecer ShouldMovePart mencionado en la sección anterior en true si tienes un objeto visible aquí. | optional |
Partículas de boca
Esta opción emite partículas del ParticleEmitter especificado en el TipAttachment Attachment del arma cuando se dispara.
Descendientes de la configuración:

- ShotEffect (StringValue) — Nombre de un efecto de disparo almacenado en WeaponsSystem/Assets/Effects/Shots.
- NumMuzzleParticles (IntValue) (opcional) — Número de partículas de boca que se emitirán; el valor predeterminado es 50.
Para el efecto de disparo especificado, agrega un activo ParticleEmitter dentro de WeaponsSystem/Assets/Effects/Shots llamado MuzzleParticles.

Destellos de boca
Esta opción crea un efecto de destello Beam cuando se dispara el arma.
Descendientes del modelo:

- MuzzleFlash0 (Attachment) — Utilizado para especificar un lado del destello de boca. La posición no importa.
- MuzzleFlash1 (Attachment) — Utilizado para especificar el lado opuesto del destello de boca. La posición no importa.
- MuzzleFlash (Beam) — Asegúrate de establecer Attachment0 en MuzzleFlash0 y Attachment1 en MuzzleFlash1.
Descendientes de la configuración:

- MuzzleFlashTime (NumberValue) (opcional) — Longitud del tiempo que se mostrará el destello de boca; el valor predeterminado es 0.03.
- MuzzleFlashRotation0 (NumberValue) (opcional) — Rotación mínima del destello de boca; el valor predeterminado es -math.pi.
- MuzzleFlashRotation1 (NumberValue) (opcional) — Rotación máxima del destello de boca; el valor predeterminado es math.pi.
- MuzzleFlashSize0 (NumberValue) (opcional) — Tamaño mínimo del destello de boca; el valor predeterminado es 1.
- MuzzleFlashSize1 (NumberValue) (opcional) — Tamaño máximo del destello de boca; el valor predeterminado es 1.
Rutas de partículas
Esta opción crea una cola de longitud variable desde el arma hasta el punto de impacto del proyectil.
Descendientes de la configuración:

- TrailLength (NumberValue) (opcional) — Longitud de la cola detrás de la bala/proyectil; el valor predeterminado es nil, lo que significa que la longitud de la cola se calculará utilizando TrailLengthFactor.
- TrailLengthFactor (NumberValue) (opcional) — La longitud de la cola se establecerá en este valor multiplicado por la distancia que la bala/proyectil viajó en el último cuadro; el valor predeterminado es 1. Ten en cuenta que esto se sobrescribirá si incluyes TrailLength.
- ShowEntireTrailUntilHit (BoolValue) (opcional) — Establecer en true para renderizar la cola desde la punta del arma hasta donde esté el proyectil; esto sobrescribirá tanto TrailLength como TrailLengthFactor y la cola solo desaparecerá una vez que el proyectil golpee algo. Establecer en false para utilizar una de las dos opciones anteriores para calcular la longitud de la cola. El valor predeterminado es false.
Marcas de impacto
Esta adición visual aparece en la superficie donde los proyectiles golpean y es útil para flechas, agujeros de bala, marcas de quemaduras, etc.
Descendientes de la configuración:

- HitMarkEffect (StringValue) (opcional) — Nombre del efecto de marca de impacto almacenado en WeaponsSystem/Assets/Effects/HitMarks; el valor predeterminado es BulletHole.
- AlignHitMarkToNormal (BoolValue) (opcional) — Establecer en true si la marca de impacto debe alinearse siempre plana contra la superficie como un agujero de bala, o false si la marca de impacto debe aparecer atascada en la superficie desde la dirección de la que vino el proyectil (como una flecha). El valor predeterminado es true.
Puedes añadir el siguiente activo opcional dentro de WeaponsSystem/Assets/Effects/HitMarks:

- Glow (Decal) (opcional) — Aparece en la superficie golpeada completamente opaco, luego se vuelve rápidamente más transparente, como un efecto luminoso en la superficie que se desvanece rápidamente. Útil para mostrar una marca roja brillante donde golpean los explosivos.
- BulletHole (Decal) (opcional) — Aparece en la superficie golpeada completamente opaco y, después de 4 segundos, se desvanece a transparente durante 1 segundo.
- ImpactBillboard (BillboardGui) (opcional) — Se muestra en la superficie golpeada, siempre enfrentándose hacia la cámara.
- Impact (ImageLabel) (opcional) — Hijo directo de ImpactBillboard; comienza completamente opaco, crece al tamaño completo del ImpactBillboard en 0.1 segundos, luego se encoge a la mitad de su tamaño y se desvanece a transparencia completa durante 0.1 segundos.
- Cualquier Part/MeshPart/SpecialMesh que quieras que aparezca como un proyectil físico (opcional). Por ejemplo, incluir un MeshPart de flecha y establecer AlignHitMarkToNormal mencionado arriba en false hará que la flecha salga de la superficie desde la dirección desde la que la disparaste.
Proyectiles explosivos
Los proyectiles pueden incluir un objeto Explosión para dañar personajes jugadores en un área alrededor del punto de impacto.
Descendientes de la configuración:

- ExplodeOnImpact (BoolValue) (opcional) — Establecer en true si deseas que las balas/proyectiles del arma exploten al impactar, false de lo contrario. El valor predeterminado es false.
- BlastDamage (NumberValue) (opcional) — Daño infligido a las cosas en el centro de la explosión. Ten en cuenta que la explosión hace menos daño cuanto más lejos estén los objetos golpeados del centro de la explosión. El valor predeterminado es 100.
Arma de carga
Una arma de carga como el Railgun debe ser cargada entre disparos antes de poder disparar nuevamente.
Descendientes del modelo:

- Charging (Sound) (opcional) — Se reproduce mientras el arma se carga.
- Discharging (Sound) (opcional) — Se reproduce mientras el arma se descarga, por ejemplo, si cargas el arma solo parcialmente y sueltas el botón de disparo.
- ChargeComplete (Sound) (opcional) — Se reproduce cuando el arma ha alcanzado la carga completa.
- DischargeComplete (Sound) (opcional) — Se reproduce cuando el arma se ha descargado completamente.
- ChargeGlow (BasePart) (opcional) — Este objeto se volverá menos transparente a medida que el arma se carga, de modo que será completamente opaco al 100% de carga.
- ChargeCompleteParticles (ParticleEmitter) (opcional) — Emite cuando el arma ha terminado de cargarse. Este emisor puede ser un hijo de cualquier BasePart del modelo o un hijo de un Attachment dentro del BasePart.
- DischargeCompleteParticles (ParticleEmitter) (opcional) — Emite cuando el arma se ha descargado completamente. Este emisor puede ser un hijo de cualquier BasePart del modelo o un hijo de un Attachment dentro del BasePart.
- ChargingParticles (ParticleEmitter) (opcional) — Emite mientras el arma se carga. Puedes incluir múltiples emisores con este nombre y cada uno emitirá mientras se carga. Este emisor puede ser un hijo de cualquier BasePart del modelo o un hijo de un Attachment dentro del BasePart.
Descendientes de la configuración:

- ChargeRate (NumberValue) — Tasa a la cual se cargará arma. Este valor debe especificarse para indicar que el arma utiliza carga.
- DischargeRate (NumberValue) (opcional) — Tasa a la cual el arma se descargará; el valor predeterminado es 0, lo que significa que el arma no se descargará en absoluto.
- ChargePassively (BoolValue) (opcional) — Establecer en true si deseas que el arma se cargue pasivamente para que dispare de inmediato cuando hagas clic, o false si deseas hacer clic/tocar para cargar el arma y que dispare una vez que haya alcanzado la carga completa. El valor predeterminado es false.
- ChargingParticlesRatePerCharge (IntValue) (opcional) — Número de partículas que se emitirán de todos los emisores de ChargingParticles multiplicado por la carga actual del arma. El valor predeterminado es 20, lo que significa que si la carga del arma está en 10%, cada emisor de partículas de carga emitirá 2 partículas (20×0.1), y si la carga del arma está en 90%, cada emisor emitirá 18 partículas (20×0.9).
- FireDischarge (NumberValue) (opcional) — Cantidad de carga que perderá el arma después de disparar un tiro completamente cargado; el valor predeterminado es 1.
- NumChargeCompleteParticles (IntValue) (opcional) — Número de partículas que el emisor ChargeCompleteParticles emitirá una vez que el arma esté completamente cargada. El valor predeterminado es 25.
- NumDischargeCompleteParticles (IntValue) (opcional) — Número de partículas que el emisor DischargeCompleteParticles emitirá cuando el arma se descargue completamente. El valor predeterminado es 25.
Arma de arco
Un arma de arco como la Ballesta puede incluir una construcción realista de cuerdas y brazos, así como una flecha visual nockeada a la cuerda.
Además de añadir descendientes del modelo, necesitas aplicar lo siguiente:
- Convierte el arma en un arma de carga. Por ejemplo, agrega la requerida ChargeRate dentro de la Configuration del arma que especifica cuán rápido se tira la cuerda. Además, considera agregar descendientes opcionales a la Model del arma, como un sonido de Charging para la cuerda/brazos que se tiran hacia atrás.
Descendientes del modelo:

- LeftString (Beam) (opcional) — La mitad izquierda visual de la cuerda.
- RightString (Beam) (opcional) — La mitad derecha visual de la cuerda.
- Arrow (BasePart) (opcional) — La flecha que aparece cuando el arco está completamente tirado. Ten en cuenta que esto es solo para la apariencia visual en el arco (la flecha disparada real será un ShotEffect como se describe en Efectos/Golpes de Proyectiles y Sonidos).
- String1 (Attachment) (opcional) — El punto central de la cuerda.
- StringLoose (Attachment) (opcional) — Punto donde String1 debería estar cuando el arco está en reposo.
- StringTight (Attachment) (opcional) — Punto donde String1 debería estar cuando el arco está completamente tirado.
- Arms (Part) (opcional) — Una parte que simplemente sirve como un indicador interno de que los brazos del arco serán animados. Esto puede contener los siguientes hijos directos:
- LeftString0 (Attachment) (opcional) — Punto donde se une el lado izquierdo de la cuerda al arco.
- RightString0 (Attachment) (opcional) — Punto donde se une el lado derecho de la cuerda al arco.
- LeftLoose (Attachment) (opcional) — Punto donde LeftString0 debería estar cuando el arco está en reposo.
- RightLoose (Attachment) (opcional) — Punto donde RightString0 debería estar cuando el arco está en reposo.
- LeftTight (Attachment) (opcional) — Punto donde LeftString0 debería estar cuando el arco está completamente tirado.
- RightTight (Attachment) (opcional) — Punto donde RightString0 debería estar cuando el arco está completamente tirado.
- [SpecialMesh] (SpecialMesh) (opcional) — La parte del arco que realmente se doblará cuando se tire del arco. Ten en cuenta que debes especificar los siguientes cuatro objetos Vector3Value para que esto se anime.
- LooseOffset (Vector3Value) (opcional) — Desplazamiento del SpecialMesh cuando el arco está en reposo.
- TightOffset (Vector3Value) (opcional) — Desplazamiento del SpecialMesh cuando el arco está completamente tirado.
- TightScale (Vector3Value) (opcional) — Escala del SpecialMesh cuando el arco está completamente tirado.
GUI del sistema de armas
El sistema central de armas se comunica con este sistema para actualizar el GUI en función de cosas como la dispersión del arma, indicadores para cuando te golpean o golpeas a otros, etc.
El WeaponsSystemGui es un objeto ScreenGui en WeaponsSystem/Assets que se coloca en PlayerGui cuando comienza la experiencia. El WeaponSystemGui tiene 4 descendientes:
- ScalingElements - Una Folder de elementos en pantalla.
- LargeTouchscreen - Un Frame para botones en pantallas táctiles grandes.
- SmallTouchscreen - Un Frame para botones en pantallas táctiles pequeñas.
Elementos escalables
ScalingElements es una Folder situada bajo WeaponsSystemGui con los siguientes descendientes:
| Nombre | Tipo de instancia | Descripción |
|---|---|---|
| DirectionalIndicators | Folder | Una Folder donde se almacenan todos los indicadores direccionales. |
| Crosshair | Frame | Un Frame que contiene los siguientes objetos: [UIAspectRationConstraint] - UIAspectRatioConstraint Bottom - ImageLabel Left - ImageLabel Right - ImageLabel Top - ImageLabel |
| HitMarker | Frame | Un Frame que contiene los siguientes objetos: [UIAspectRatioConstraint] - UIAspectRatioConstraint HitMarkerImage - ImageLabel que aparece y se desvanece cuando el jugador golpea exitosamente a otro personaje jugador. |
Pantalla táctil grande
LargeTouchscreen es un Frame que contiene botones que se muestran en pantallas táctiles grandes. LargeTouchscreen tiene los siguientes descendientes:
- AimButton (ImageButton)
- FireButton (ImageButton)
Mira
Scope es un Frame que contiene ScopeImage (ImageLabel) que aparece al hacer zoom en un arma con HasScope habilitado (ver Estructura del Arma).
Scope tiene los siguientes descendientes:
| Nombre | Tipo de instancia | Descripción |
|---|---|---|
| ScopeInstance | Frame | Un Frame que contiene los siguientes activos utilizados al hacer zoom en un arma con HasScope habilitado: [UIAspectRationConstraint] - UIAspectRatioConstraint BottomBlack - Frame LeftBlack - Frame RightBlack - Frame TopBlack - Frame |
Pantalla táctil pequeña
SmallTouchScreen es un Frame que contiene botones que se muestran en pantallas táctiles pequeñas. SmallTouchscreen tiene los siguientes descendientes:
- AimButton (ImageButton)
- FireButton (ImageButton)
Crear un indicador direccional
Los indicadores direccionales se utilizan para mostrar la dirección de algo alrededor del puntero del jugador. Por ejemplo, si alguien te dispara, se puede mostrar un semicírculo rojo alrededor de tu puntero en la dirección de la que provino el disparo. Otros ejemplos incluyen indicadores para mostrar la dirección de pasos, fuego indirecto o incluso objetos ambientales como cofres.
Para crear un nuevo indicador, agrega una nueva Frame de Indicador en WeaponsSystemGui/ScalingElements/DirectionalIndicators con la siguiente estructura:
| Nombre | Tipo de instancia | Descripción |
|---|---|---|
| [UIAspectRationConstraint] | UIAspectRatioConstraint | |
| [ImageLabel] | ImageLabel | Imagen del indicador direccional. Puede ser necesario ajustar la rotación de la imagen en Studio a menos que subas la imagen de modo que esté orientada hacia abajo y haya poco o ningún espacio en blanco alrededor. Esta etiqueta de imagen también debe contener su propio UIAspectRatioConstraint. |
| [Configuración] | Configuration | Contiene propiedades opcionales para ajustar. Consulta Configuración de Indicadores para más información. |
Una vez creado, puedes activar un indicador mediante el siguiente comando dentro de WeaponsSystem/Libraries/WeaponsGui donde indicatorName es el nombre de cadena del indicador a activar y worldPos es la posición en el mundo donde debe apuntar el indicador direccional:
self.DirectionalIndicatorGuiManager:ActivateDirectionalIndicator(indicatorName, worldPos)
Configuración del indicador
Los DirectionalIndicators se pueden modificar aún más ajustando el objeto Configuration padre bajo el [Indicator]. Todos estos ajustes tienen un valor predeterminado, por lo que no es necesario establecer configuraciones cuando no se modifica una configuración.
Las siguientes configuraciones se pueden establecer:
| Nombre | Tipo de instancia | Descripción |
|---|---|---|
| DistanceLevelFromCenter | NumberValue | Número de niveles de distancia desde el centro de la pantalla (cada nivel de distancia es aproximadamente 0.03 de la escala de la pantalla); el valor predeterminado es 6. |
| FadeTime | NumberValue | Tiempo de desvanecimiento del indicador después de su activación y el tiempo TimeBeforeFade; el valor predeterminado es 1. |
| Name | StringValue | Nombre del indicador direccional como deseas referenciarlo en el código; el valor predeterminado es el nombre de la Frame de nivel superior del indicador. |
| TimeBeforeFade | NumberValue | Número de segundos que el indicador aparecerá antes de desvanecerse; el valor predeterminado es 1. |
| TransparencyBeforeFade | NumberValue | Transparencia del indicador antes de que comience a desvanecerse; el valor predeterminado es 0. |
| WidthLevel | NumberValue | Número de niveles de ancho desde el centro (cada nivel de ancho es aproximadamente 0.03 de la escala de la pantalla); el valor predeterminado es el valor de DistanceLevelFromCenter. |
Mostrar cartel de daño
El cartel de daño se utiliza para mostrar pequeños números sobre la cabeza de un personaje cuando sufren daño. Estos solo aparecerán para el jugador que dañó al personaje de otro jugador, no para los jugadores que están observando.
Los carteles de daño se manejan en WeaponsSystem/Libraries/DamageBillboardHandler y se pueden activar desde cualquier código del lado del cliente de la siguiente manera, donde damage es la cantidad de daño infligido y adornmentPart es la parte en la que adornar el cartel, como la cabeza de la víctima:
DamageBillboardHandler:ShowDamageBillboard(damage, adornmentPart)
Cámara sobre el hombro
La cámara sobre el hombro es una cámara en tercera persona que mira sobre el hombro derecho del personaje jugador. Para personalizar la cámara sobre el hombro, modifica las variables bajo el comentario -- Parámetros de configuración (constantes) en la función ShoulderCamera.new() de WeaponsSystem/Libraries/ShoulderCamera. Puedes modificar cosas como el campo de visión, el desplazamiento desde el personaje, la velocidad de caminar mientras corres o haces zoom, etc.
Control de carrera y zoom
Por defecto, el sistema de armas añade la capacidad de "correr", por lo que los jugadores pueden correr manteniendo presionada la tecla Shift, presionando completamente hacia arriba en el thumbstick dinámico (móvil) o presionando completamente hacia arriba en el joystick izquierdo (gamepad). Si deseas desactivar la carrera, establece el valor de SprintEnabled dentro de WeaponsSystem/Configuration en false.
El sistema también reduce la velocidad del jugador mientras está apuntando/haciendo zoom, pero puedes desactivar este comportamiento estableciendo el valor de SlowZoomWalkEnabled en false.









