为了协助创建竞争性战斗体验,提供了若干经过认可的武器,可用于任何体验。核心系统特色是具有肩上视角的投射型武器,当投射速度设置得足够高时,可以模拟激光枪等光线投射武器。

在您的体验中使用经过认可的武器:
- 从下面选择一种武器,导航到资产库链接。
在武器的物品页面上,点击绿色的 获取 按钮并确认交易。
在Studio中,打开工具箱。
选择工具箱的 库存 部分。
找到武器并点击它将其添加到游戏中。当系统提示是否将工具放入起始包时,如果您希望玩家在背包中开始时就拥有该武器,请点击 是,如果仅希望将武器放入3D世界中作为可拾取物品,请点击 否。
如果这是 第一次 导入经过认可的武器,请将其 WeaponsSystem 文件夹移动到 ServerScriptService 中,以便作为体验中所有经过认可的武器的统一系统文件夹。

系统文件夹结构
WeaponsSystem 文件夹是一个统一的文件夹,包含资产、配置和用于驱动体验中所有经过认可的武器的脚本。如果该文件夹位于 ServerScriptService 中,将覆盖可能存在于各个武器内的任何等效 WeaponsSystem 文件夹。

WeaponsSystem 文件夹包含以下实例:
- WeaponTypes (Folder) – 指定所有武器类型。
- ServerWeaponsScript (Script)
- Version (IntValue)
- ClientWeaponScript (LocalScript)
- NetworkingCallbacks (ModuleScript)
- WeaponData (RemoteEvent)
- WeaponsSystem (ModuleScript)
在 WeaponsSystem 文件夹中,以下 ModuleScripts 控制不同的方面:
| 方面 | 主要处理于... |
|---|---|
| 武器功能 |
|
| 肩上摄像头 |
|
| 武器 GUI |
|
武器结构
经过认可的武器是 Tools,其命名方式与玩家背包中显示的方式相同。每个武器的结构具有相似的层级。
武器类型
WeaponType StringValue 与 WeaponsSystem/WeaponTypes 文件夹中该武器的 ModuleScript 关联。两个基本值是 BulletWeapon 和 BowWeapon。
武器模型
每个武器包含一个由一个或多个 BaseParts 组成的 Model,形成物理武器。其中一个应设置为模型的 PrimaryPart。

模型还包括以下重要子代,可以作为模型的 BaseParts 的子项:
- 额外的子代用于任何专用选项。
武器手柄
Handle 部件决定玩家角色持有武器的位置。它必须是一个 Part,必须命名为 Handle,并且必须是武器(工具)的直接子项。
配置文件夹
Configuration 文件夹包含特定的"值"类型,以影响武器行为。除了默认值,您还可以在适用时添加额外的配置项,用于专用选项。
以下是基本配置及其默认值:
| 项目 | 描述 | 默认值 |
|---|---|---|
| AmmoCapacity | 每个“弹药夹”中的射击次数,玩家必须重新装填。请注意,弹药是无限的,这并不指定玩家携带的弹药量。 | 30 |
| FireMode | 可以选择 半自动(每次点击/触摸一次射击)、自动(连续射击)或 ** burst**(每次点击/触摸射击与 NumBurstShots 相等的射击数)。 | 半自动 |
| ShotCooldown | 点击之间的最小等待时间。对于 FireMode 为 自动 的武器,这也是按下射击按钮或保持点击时,射击之间的时间。 | 0.1 |
| BurstShotCooldown | 在一个爆发中的每次射击之间的时间;仅在将 FireMode 设置为 burst 时有效。 | ShotCooldown 的值 |
| NumBurstShots | 每次点击/爆发中的射击数;仅在将 FireMode 设置为 burst 时有效。 | 3 |
| HitDamage | 每次直接命中的伤害量。 | 10 |
| FullDamageDistance | 射击造成全额伤害的最大距离。超出此距离击中任何物体的伤害会逐渐减少,直到接近 ZeroDamageDistance。 | 1000 |
| ZeroDamageDistance | 在该距离上或超出该距离击中的任何物体将不会受到伤害。 | 10000 |
| BulletSpeed | 子弹/投射物射出时的速度。将此设置为非常高的值,比如 20000,可以模拟激光枪等光线投射武器。 | 1000 |
| MaxDistance | 子弹/投射物在消失前可旅行的最大距离。 | 2000 |
| MinSpread | 武器的最小散布量。 | 0 |
| MaxSpread | 武器的最大散布量。 | MinSpread 的值 |
| GravityFactor | 重力对每个子弹/投射物的影响程度。例如,对于弩,该值为 1,因为箭矢在飞行中呈弧线;但对于火箭发射器,该值为 0,因为推进的火箭是笔直飞行的。 | 0 |
| HasScope | 如果想使用在武器系统 GUI中指定的瞄准镜,请设置为 true。 | false |
| ReloadAnimation | 位于 Assets/Animations 的重新装填动画轨道的名称,属于系统文件夹。 | RifleReload |
| AimTrack | 位于 Assets/Animations 的瞄准动画轨道的名称,属于系统文件夹。 | RifleAim |
| AimZoomTrack | 位于 Assets/Animations 的瞄准缩放动画轨道的名称,属于系统文件夹。 | RifleAimDownSights |
| RecoilMin | 每次射击产生的最小后坐力。 | 0.05 |
| RecoilMax | 每次射击产生的最大后坐力。 | 0.5 |
| TotalRecoilMax | 总的最大累积后坐力。武器的当前后坐力永远不会超过此值。 | 2 |
| RecoilDecay | 后坐力的衰减乘数;实际上是射击后后坐力的减少速率。 | 0.825 |
| RecoilDelayTime | 射击/点击后等待时间,然后再将后坐力添加到摄像机。 | 0.07 |
| StartupTime | 装备武器后,玩家可以射击的时间长度。这可以防止玩家快速顺序从多个不同武器中开火。 | 0.2 |
| FiredPlaybackSpeedRange | 武器的 Fired 声音的音调变化范围。将此设置为 0 以始终以相同的音调播放。 | 0.1 |
| NumProjectiles | 当您点击/触摸一次时同时射击的子弹/投射物数量。这对于像霰弹枪这类同时射击多个子弹的武器非常有用。请注意,一次射击始终使用确切的一发弹药,无论这个值是什么。 | 1 |
专用选项
您可以为任何武器添加/修改以下选项。这些自定义需要修改武器的 Model、武器的 Configuration 或两者。有些配置依赖于其他配置,例如 枪口粒子需要必要的子项,以实现 投射物/击中效果和声音。
决定和声音
武器的 bolt 是在每次射击时来回移动的部分。
- 武器的武器模型的子代
| Bolt | BasePart,在武器开火时移动。 | |
| BoltMotor | Motor6D 用于动画化 bolt。确保将电机的 Part0 设置为武器模型的 PrimaryPart,将 Part1 设置为 Bolt 部件。 | |
| BoltMotorStart | Attachment,其在父 BasePart 上的位置决定了 bolt 静止时的位置。 | |
| BoltMotorTarget | Attachment,其在父 BasePart 上的位置决定了 bolt 在开火时的动画位置。 | |
| BoltOpenSound | Sound,在 bolt 打开时播放。 | optional |
| BoltCloseSound | Sound,在 bolt 关闭时播放。 | optional |
- 武器的配置文件夹的子项
| 项目 | 描述 | 默认值 |
|---|---|---|
| ActionOpenTime | 打开 bolt 至打开位置所需的时间。 | 0.025 |
| ActionCloseTime | 关闭 bolt 至关闭位置所需的时间。 | 0.075 |
弹壳弹出
武器可以包括物理弹壳,在射击时弹出并掉落到地面。
- 武器的武器模型的子代
| CasingEjectPoint | Attachment,其在父 BasePart 上的位置决定了您希望弹壳弹出的地方。请注意,其方向决定弹壳弹出的方向。 |
- 武器的配置文件夹的子项
| 项目 | 描述 | 默认值 |
|---|---|---|
| CasingEffect | 在 系统文件夹 的 Assets/Effects/Casings 中弹壳 BasePart 的名称。 | |
| CasingEjectSpeedMin | 弹壳的最小弹出速度 | 15 |
| CasingEjectSpeedMax | 弹壳的最大弹出速度 | 18 |
| CasingHitSound | Sound,当弹壳击中地面时播放。 | optional |
投射物/击中效果和声音
您可以为任何武器配置物理投射物,以及用于击中效果和其他特殊效果的 Sounds、Beams 和 ParticleEmitters。
- 武器的配置文件夹的子项
| 项目 | 描述 | 默认值 |
|---|---|---|
| ShotEffect | 名称,存储在 系统文件夹 的 Assets/Effects/Shots 中的射击效果。 | |
| ShouldMovePart | 如果武器的 ShotEffect 应随着投射物移动,请设置为 true;如果不应移动,设置为 false。只有在有可视对象与每次射击一起移动时,例如箭矢或火箭时,您才应该将其设置为 true。 | false |
| BeamFadeTime | 在子弹/投射物击中某物后,Beam0 或 Beam1 (见 下文) 消失所需的时间。默认情况下,代码不会应用手动消失。 | 0 |
| BeamWidth0 | 在 Attachment0 处的 Beam0 或 Beam1 的厚度 (见 下文)。 | 1.5 |
| BeamWidth1 | 在 Attachment1 处的 Beam0 或 Beam1 的厚度 (见 下文)。 | 1.8 |
| NumHitParticles | HitParticles (见 下文) 发射器将发射的粒子数量。 | 3 |
| HitParticlesUsePartColor | 如果希望击中粒子的颜色与击中表面相同,请设置为 true;如果希望击中粒子不改变颜色,请设置为 false。 | true |
ShotEffect 子代
在之前部分指定的 ShotEffect 的子代
| Flying | Sound,在子弹/投射物移动时播放。 | optional |
| Beam0 | 用于子弹/投射物后面的第一条 Beam 槽。不要忘记设置 Attachment0 和 Attachment1。 | optional |
| Beam1 | 用于子弹/投射物后面的第二条 Beam 槽。不要忘记设置 Attachment0 和 Attachment1。 | optional |
| Attachment0 | Attachment,其在父 BasePart 上的位置决定了跟随光线的后面部分;请确保将 Beam.Attachment0 在 Beam0 和 Beam1 上设置为此。 | optional |
| Attachment1 | Attachment,其在父 BasePart 上的位置决定了跟随光线的前面部分;请确保将 Beam.Attachment1 在 Beam0 和 Beam1 上设置为此。 | optional |
| TrailParticles | ParticleEmitter,直接作为 Attachment0 的子项;在子弹/投射物移动时将发射。 | optional |
| LeadingParticles | ParticleEmitter,直接作为 Attachment1 的子项;在子弹/投射物移动时将发射。 | optional |
| HitEffect | Attachment,在子弹/投射物击中时将其位置设置为 Beam0 的 Beam.Attachment1。必须为此正确指定 Beam0 及其附件。 | optional |
| HitSound | Sound,直接作为 HitEffect 的子项;在子弹/投射物击中时播放。 | optional |
| HitParticles | Sound,直接作为 HitEffect 的子项;在子弹/投射物击中时发射。 | optional |
| [ProjectilePart] | 任何 Part 或 MeshPart,希望作为物理投射物出现。请确保在上述部分将 ShouldMovePart 设置为 true,如果您在此有可视对象。 | optional |
枪口粒子
此选项在武器的 TipAttachment Attachment 处发射粒子。
配置子代:

对于指定的射击效果,请在 WeaponsSystem/Assets/Effects/Shots 中添加一个名为 MuzzleParticles 的 ParticleEmitter 资产。

枪口闪光
此选项在武器发射时创建 Beam 闪光效果。
模型子代:

- MuzzleFlash0 (Attachment) — 用于指定枪口闪光的一侧。位置无关紧要。
- MuzzleFlash1 (Attachment) — 用于指定枪口闪光的另一侧。位置无关紧要。
配置子代:

粒子拖尾
此选项创建从武器到投射物碰撞点的可变长度拖尾。
配置子代:

- TrailLengthFactor (NumberValue)(可选) — 拖尾长度将设置为该值乘以在上一个帧中子弹/投射物移动的距离;默认值为 1。请注意,如果包含 TrailLength,则将覆盖此项。
- ShowEntireTrailUntilHit (BoolValue)(可选) — 设置为 true 以从武器尖端一直显示拖尾,直到投射物命中某物;这将覆盖 TrailLength 和 TrailLengthFactor,拖尾将在投射物击中某物之前不会消失。设置为 false 以使用上述两个选项之一来计算拖尾长度。默认值为 false。
击中标记
此视觉效果出现在投射物击中表面上,并且对于箭矢、子弹孔、烧焦痕迹等非常有用。
配置子代:

- HitMarkEffect (StringValue)(可选) — 存储在 WeaponsSystem/Assets/Effects/HitMarks 中的击中标记效果名称;默认值为 BulletHole。
- AlignHitMarkToNormal (BoolValue)(可选) — 设置为 true 如果击中标记应该始终平整地对齐在表面上,如子弹孔;设置为 false 如果击中标记应该显得从投射物来的方向被插入在表面上(如箭矢)。默认值为 true。
您可以在 WeaponsSystem/Assets/Effects/HitMarks 中添加以下可选资产:

- Glow (Decal)(可选) — 显示在击中表面上完全不透明,然后迅速变得更加透明,有点像在表面上发光的效果,可以快速消失。适用于显示爆炸物命中时出现的红色光点。
- BulletHole (Decal)(可选) — 显示在击中表面上完全不透明,4秒后逐渐淡出到透明,持续1秒。
- ImpactBillboard (BillboardGui)(可选) — 显示在击中表面上,始终朝向相机方向。
- Impact (ImageLabel)(可选) — ImpactBillboard 的直接子项;这是完全不透明的,0.1秒内增长至 ImpactBillboard 的全尺寸,然后缩小至一半的大小,再在0.1秒内淡出到完全透明。
- 任何希望作为物理投射物出现的 Part/MeshPart/SpecialMesh(可选)。例如,包含一个箭矢 MeshPart 并将上述 AlignHitMarkToNormal 设置为 false 将使箭矢从您发射的方向插入到表面中。
爆炸投射物
投射物可以包括一个爆炸对象,以在碰撞点周围伤害玩家角色。
配置子代:

充能武器
像磁轨炮这样的充能武器,必须在射击之间充能才能再次开火。
模型子代:

- Charging (Sound)(可选) — 在武器充能时播放。
- Discharging (Sound)(可选) — 在武器放电时播放,例如如果您仅部分充能然后释放射击按钮。
- ChargeComplete (Sound)(可选) — 在武器达到完全充能时播放。
- DischargeComplete (Sound)(可选) — 在武器完全放电时播放。
- ChargeGlow (BasePart)(可选) — 该对象将在武器充能时变得不透明100%,充能时将透明度减少。
- ChargeCompleteParticles (ParticleEmitter)(可选) — 在武器完成充能时发射。此发射器可以是任何模型 BasePart 的子项或在 BasePart 中的某个 Attachment 的子项。
- DischargeCompleteParticles (ParticleEmitter)(可选) — 在武器完全放电时发射。此发射器可以是任何模型 BasePart 的子项或在 BasePart 中的某个 Attachment 的子项。
- ChargingParticles (ParticleEmitter)(可选) — 在武器充能时发射。您可以包含多个此名称的发射器,每个发射器在充能时将发射。此发射器可以是任何模型 BasePart 的子项或在 BasePart 中的某个 Attachment 的子项。
配置子代:

- ChargeRate (NumberValue) — 武器充能的速率。必须指定此值以指示武器使用充能。
- ChargePassively (BoolValue)(可选) — 设置为 true 如果希望武器被动充能,以便在单击时立即开火;设置为 false 如果希望点击/触摸以充能武器并在充能完成后开火。默认值为 false。
- ChargingParticlesRatePerCharge (IntValue)(可选) — 将根据武器的当前充能量,所有 ChargingParticles 发射器将发射的粒子数量 默认值为 20,意味着,如果武器的充能量为10%,每个ChargingParticles发射器将发射2个粒子(20×0.1);如果武器的充能量为90%,每个发射器将发射18个粒子(20×0.9)。
- NumDischargeCompleteParticles (IntValue)(可选) — 当武器完全放电时, DischargeCompleteParticles 发射器将发射的粒子数量。默认值为 25。
弓力武器
像弩这样的弓力武器可以包含真实的弓弦和手臂结构,以及可视化箭矢卡在弓弦上。
除了添加模型子代外,您需要应用以下内容:
- 将武器设置为充能武器。例如,添加武器的 Configuration 中所需的 ChargeRate,指定弓弦拉动的快速程度。此外,考虑向武器的 Model 添加可选子代,例如拉动弓弦的 Charging 音效。
模型子代:

- LeftString (Beam)(可选) — 视觉左半边弓弦。
- RightString (Beam)(可选) — 视觉右半边弓弦。
- String1 (Attachment)(可选) — 弓弦的中心点。
- Arms (Part)(可选) — 仅用作内部指示器的部件,以表明弓的手臂将被动画化。此对象可能包含以下直接子项:
- LeftString0 (Attachment)(可选) — 弓的左侧弓弦要附着的点。
- RightString0 (Attachment)(可选) — 弓的右侧弓弦要附着的点。
- [SpecialMesh] (SpecialMesh)(可选) — 弓的部分,拉紧时将实际弯曲。请注意,您必须指定以下四个 Vector3Value 对象以使其动画化。
武器系统 GUI
核心武器系统通过此系统与 GUI 接口,基于枪支的散布、您被击中或击中的指示器等内容来更新 GUI。
WeaponsSystemGui 是 WeaponsSystem/Assets 中的一个 ScreenGui 对象,在体验开始时附加到 PlayerGui。WeaponSystemGui 有 4 个子代:
- ScalingElements - 存储在屏幕元素文件夹的 Folder。
- LargeTouchscreen - 用于大型触摸屏的 Frame。
- SmallTouchscreen - 用于小型触摸屏的 Frame。
缩放元素
ScalingElements 是 WeaponsSystemGui 下的 Folder,具有以下子代:
| 名称 | 实例类型 | 描述 |
|---|---|---|
| DirectionalIndicators | Folder | 存储所有方向指示器的 Folder。 |
| Crosshair | Frame | 包含以下对象的 Frame: [UIAspectRationConstraint] - UIAspectRatioConstraint Bottom - ImageLabel Left - ImageLabel Right - ImageLabel Top - ImageLabel |
| HitMarker | Frame | 包含以下对象的 Frame: [UIAspectRatioConstraint] - UIAspectRatioConstraint HitMarkerImage - ImageLabel,在玩家成功击中另一个玩家角色时出现并淡出。 |
LargeTouchscreen
LargeTouchscreen 是一个 Frame,包含在大型触摸屏上显示的按钮。LargeTouchscreen 具有以下子代:
- AimButton (ImageButton)
- FireButton (ImageButton)
Scope
Scope 是包含 ScopeImage (ImageLabel) 的 Frame,在使用启用 HasScope 的武器时进行缩放显示(参见武器结构)。
Scope 具有以下子代:
| 名称 | 实例类型 | 描述 |
|---|---|---|
| ScopeInstance | Frame | 在缩放显示时使用的 Frame,包含以下资产,这些资产用于启用 HasScope 的武器: [UIAspectRationConstraint] - UIAspectRatioConstraint BottomBlack - Frame LeftBlack - Frame RightBlack - Frame TopBlack - Frame |
SmallTouchscreen
SmallTouchScreen 是一个 Frame,包含在小型触摸屏上显示的按钮。SmallTouchscreen 具有以下子代:
- AimButton (ImageButton)
- FireButton (ImageButton)
创建方向指示器
方向指示器用于显示玩家十字准心周围事物的方向。例如,如果有人向您开火,则可以在您的十字准心周围出现一个红色半圆形以指示枪火的来向。其他示例包括显示脚步声、间接枪火或环境物体(如箱子)的方向。
要创建新的方向指示器,请在 WeaponsSystemGui/ScalingElements/DirectionalIndicators 中添加一个新的 Indicator Frame,结构如下:
| 名称 | 实例类型 | 描述 |
|---|---|---|
| [UIAspectRationConstraint] | UIAspectRatioConstraint | |
| [ImageLabel] | ImageLabel | 方向指示器的图像。可能需要在Studio中调整图像的旋转,除非您上传图像,使其面朝下且周围没有多余的空白空间。 此图像标签还必须包含自己的 UIAspectRatioConstraint。 |
| [Configuration] | Configuration | 包含可调整的可选属性。有关更多信息,请参见指示器配置。 |
创建后,您可以通过在 WeaponsSystem/Libraries/WeaponsGui 内执行以下命令来激活指示器,其中 indicatorName 是要激活的指示器的字符串名称,worldPos 是指示器应指向的世界位置:
self.DirectionalIndicatorGuiManager:ActivateDirectionalIndicator(indicatorName, worldPos)
指示器配置
DirectionalIndicators 可以通过调整 [Indicator] 下的 Configuration 对象进一步修改。所有这些设置都有一个默认值,因此如果不修改设置,则无需设置配置。
可以设置以下配置:
| 名称 | 实例类型 | 描述 |
|---|---|---|
| DistanceLevelFromCenter | NumberValue | 距离屏幕中心的距离级数(每个距离级大约为 0.03 屏幕比例);默认值为 6。 |
| FadeTime | NumberValue | 指示器在激活和 TimeBeforeFade 时间后,淡出时间;默认值为 1。 |
| Name | StringValue | 您希望在代码中引用的方向指示器的名称;默认值为指示器顶层 Frame 的名称。 |
| TimeBeforeFade | NumberValue | 指示器出现后淡出之前显示的秒数;默认值为 1。 |
| TransparencyBeforeFade | NumberValue | 指示器在开始淡出前的透明度;默认值为 0。 |
| WidthLevel | NumberValue | 距离中心的宽度级数(每个宽度级大约为 0.03 屏幕比例);默认值为 DistanceLevelFromCenter 的值。 |
显示伤害公告板
伤害公告板用于在角色受伤时显示头顶上方的小数字。这些只会显示给损害另一个玩家角色的玩家,而不会显示给旁观的玩家。
伤害公告板在 WeaponsSystem/Libraries/DamageBillboardHandler 中处理,可以通过以下方式从任何客户端代码激活,其中 damage 是造成的伤害量,adornmentPart 是将装饰公告板的部分,例如受害者的头部:
DamageBillboardHandler:ShowDamageBillboard(damage, adornmentPart)
肩上摄像头
肩上摄像头是一个第三人称摄像头,位于玩家角色的右肩上方。要自定义肩上摄像头,请修改 WeaponsSystem/Libraries/ShoulderCamera 中 ShoulderCamera.new() 函数下的 -- Configuration parameters (constants) 注释中的变量。您可以修改视场、角色的偏移、冲刺或缩放时的行走速度等内容(参见 冲刺和缩放控制)。
冲刺和缩放控制
默认情况下,武器系统增加了“冲刺”功能,玩家可以通过按住 Shift 键、在动态触摸杆(移动设备)上完全向上推或在左摇杆(游戏手柄)上完全向上推来冲刺。如果您想禁用冲刺,将 WeaponsSystem/Configuration 中的 SprintEnabled 的值设置为 false。
系统还会在瞄准/缩放时降低玩家速度,但您可以通过将 SlowZoomWalkEnabled 的值设置为 false 来禁用此行为。









