為了協助創建競技性戰鬥經驗,可以使用幾種經過授權的武器。核心系統具有基於發射物的武器,並使用肩膀上方的攝像機,將發射物速度設置得足夠高可以模擬射線武器,如激光槍。

在你的經驗中使用經過授權的武器:
- 從下面選擇一個武器,導航到資產庫鏈接。
在武器的物品頁面,點擊綠色的 獲取 按鈕並確認交易。
在工作室打開 工具箱。
選擇你的工具箱 庫存 部分。
找到武器並點擊它將其加入該地點。當提示是否將工具放入初始包時,如果希望玩家在背包中開始使用該武器,請點擊 是,或者點擊 否 以將武器簡單地放置在 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 | 可以選擇 Semiautomatic(每次點擊/輕觸一發)、Automatic(持續發射)或 Burst(每次點擊/輕觸等同於 NumBurstShots 的射擊數量)中的任一。 | Semiautomatic |
| ShotCooldown | 點擊之間的最小等待時間。對於 FireMode 為 Automatic 的武器,這也是在按下開火按鈕或保持點擊時,射擊之間的時間。 | 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 用來為槍機動畫。確保將電機的 Part0 設置為武器模型的 PrimaryPart,並將 Part1 設置為 Bolt 部件。 | |
| BoltMotorStart | Attachment,其在父 BasePart 上的位置決定槍機靜止時的位置。 | |
| BoltMotorTarget | Attachment,其在父 BasePart 上的位置決定槍機開火時的動畫位置。 | |
| BoltOpenSound | Sound,在槍機打開時播放。 | optional |
| BoltCloseSound | Sound,在槍機關閉時播放。 | optional |
- 武器的 配置 文件夾的子項
| 項目 | 描述 | 默認值 |
|---|---|---|
| ActionOpenTime | 槍機動畫至開啟位置所花的時間。 | 0.025 |
| ActionCloseTime | 槍機動畫至關閉位置所花的時間。 | 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 | Beam0 或 Beam1 在 Attachment0 的厚度。 | 1.5 |
| BeamWidth1 | Beam0 或 Beam1 在 Attachment1 的厚度。 | 1.8 |
| NumHitParticles | HitParticles 的數量,(見下文)發射器將會發射的粒子數量。 | 3 |
| HitParticlesUsePartColor | 如果希望擊中粒子為擊中表面的顏色,則設置為 true;如果希望擊中粒子保持原色,則設置為 false。 | true |
射擊效果的後代
前面所提到的指定 ShotEffect 的後代
| Flying | Sound,在子彈/投射物移動時播放。 | optional |
| Beam0 | 第一個插槽,用於在子彈/投射物後面滯留的 Beam。不要忘記設置 Attachment0 和 Attachment1。 | optional |
| Beam1 | 第二個插槽,用於在子彈/投射物後面滯留的 Beam。不要忘記設置 Attachment0 和 Attachment1。 | optional |
| Attachment0 | Attachment,其在父 BasePart 上的位置決定後滯留光束的末端;確保在 Beam0 和 Beam1 上設置 Beam.Attachment0 為此。 | optional |
| Attachment1 | Attachment,其在父 BasePart 上的位置決定後滯留光束的前端;確保在 Beam0 和 Beam1 上設置 Beam.Attachment1 為此。 | 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 開火時發出來自指定的 ParticleEmitter 的粒子。
配置子項:

對於指定的射擊效果,在 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 中添加可選的後代,例如用於弦/手臂被拉回的充能音效。
模型子項:

- LeftString (Beam)(可選) — 弦的視覺左半部分。
- RightString (Beam)(可選) — 弦的視覺右半部分。
- String1 (Attachment)(可選) — 弦的中心點。
- Arms (Part)(可選) — 僅作為內部指示符的部件,表明弓臂會被動畫化。這可能包含以下直接子項:
- LeftString0 (Attachment)(可選) — 弦的左側附著在弓上的位置。
- RightString0 (Attachment)(可選) — 弦的右側附著在弓上的位置。
- [SpecialMesh] (SpecialMesh)(可選) — 實際上會在弓拉緊時彎曲的弓的一部分。請注意,您必須指定以下四個 Vector3Value 物件以使其動畫化。
武器系統 GUI
核心武器系統與該系統接口,根據槍的擴散程度、當您受到傷害或傷害他人時的指示器等更新 GUI。
WeaponsSystemGui 是一個 ScreenGui 物件,位於 WeaponsSystem/Assets 中,當經驗開始時作為 PlayerGui 的父項。WeaponSystemGui 擁有 4 個後代:
- ScalingElements - 存儲在螢幕上的元素的 Folder。
- LargeTouchscreen - 用於大型觸控螢幕的按鈕的 Frame。
- SmallTouchscreen - 用於小型觸控螢幕的按鈕的 Frame。
縮放元素
ScalingElements 是一個 Folder,作為 WeaponsSystemGui 的父項,擁有以下後代:
| 名稱 | 實例類型 | 描述 |
|---|---|---|
| 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 是一個 Frame,包含 ScopeImage (ImageLabel),當用 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 中添加一個新的指示器 Frame,其結構為:
| 名稱 | 實例類型 | 描述 |
|---|---|---|
| [UIAspectRationConstraint] | UIAspectRatioConstraint | |
| [ImageLabel] | ImageLabel | 方向指示器的圖像。在工作室中,可能需要調整圖像的旋轉,除非您上傳的圖像面朝下,並且周圍幾乎沒有空白空間。 此圖像標籤必須還包含自己的 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() 函數的 -- 配置參數 (常量) 註釋下的變數。您可以修改字段,例如視場,與角色的偏移量,在 衝刺或縮放 時的行走速度等。
衝刺和縮放控制
默認情況下,武器系統添加了“衝刺”功能,因此玩家可以通過按住 Shift 鍵、在動態搖杆上完全上推(手機)或在左搖杆上完全上推(遊戲手柄)來衝刺。如果您想禁用衝刺,請將 SprintEnabled 的值設置為 false,位於 WeaponsSystem/Configuration 中。
系統還在精準/縮放時降低玩家的速度,但您可以通過將 SlowZoomWalkEnabled 的值設置為 false 來禁用此行為。









