NPC工具包

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

NPC(非玩家角色)可以为体验增添很多深度。以下所有NPC都可以进行视觉自定义,它们的行为可以修改,而僵尸/士兵甚至可以通过使用tag系统攻击玩家或其他角色以保卫某个区域。

要在游戏中使用NPC:

  1. 选择以下NPC工具包之一:

    流口水的僵尸
    士兵
    RO-01机器人
    NP-C 9000机器人
  2. 在NPC的物品页面上,点击绿色的 获取 按钮并确认交易。

  3. 在Studio中,打开工具箱

  4. 选择工具箱的 库存 部分。

  5. 找到NPC并点击它以将其添加到地点中。

角色结构

每个NPC模型通常包含以下对象:

对象名称或 [类型]类型描述
动画Folder包含Animations,例如AttackAnimationDeathAnimation
初始姿势Folder包含姿势信息。
AnimateScript在角色装配上加载和播放动画。有关更多详细信息,请参见Animate
[配饰]Accessory可能是多个Accessories之一,如帽子、武器等。
生命值Script通常随时间恢复Humanoid的生命值。禁用此项会阻止角色恢复生命值。
类人Humanoid管理与Humanoid相关的属性,如Humanoid.HealthHumanoid.WalkSpeedHumanoid.DisplayDistanceType等。
NPCScript

定义特定于角色的行为,如漫游、攻击等。父对象包括以下对象:

Maid (ModuleScript)定义了一个用于释放所用资源的有用类。

Ragdoll (ModuleScript)定义一个将角色转变为受物理影响的松弛身体的函数(父对象是定义多个帮助函数的RigTypes ModuleScript)。

RbxNpcSoundsScript定义和管理与角色声音效果相关的行为,如奔跑、死亡等。
BodyPartsBasePart通过Motor6D或约束对象连接到HumanoidRootPart或相邻身体部位的各种角色身体部位。有关更多详细信息,请参见BodyParts
HumanoidRootPartBasePart一个被视为装配根部的特殊隐藏部件;这里也是角色ModelPrimaryPart
ConfigurationConfiguration包含调节各种行为的值对象。有关更多详细信息,请参见Configuration

设计说明

使用NPC工具包时,请牢记以下设计说明:

  • NPC的外观可以通过添加/修改各种[BodyParts]对象以及通过添加Accessory对象进行自定义。

  • 士兵、流口水的僵尸和NP-C 9000机器人使用Rthro作为他们装配的基础。然而,RO-01机器人使用的是修改过的Rthro基础,添加了连接到UpperTorso的推进器部件,使用WeldConstraints。以这种方式使用简单的关节可以让您在不改变原始基装配的情况下为角色添加额外的几何体。

  • 在基本层面上,NPC动画可以通过修改Animate脚本姿势中现有动画对象的AnimationIdAnimations文件夹中的动画来进行自定义。此类更改实质上是资产交换 - 要改变更细的细节,您可以创建现有动画的自定义副本,并且要在不同条件下播放动画,您可以直接编辑AnimateNPC脚本。有关更多信息,请参见Animation

Animate

NPC Model中的Animate Script处理与动画相关的配置,并包含以下对象:

对象名称或 [类型]类型描述
ScaleDampeningPercentNumberValue定义随着角色缩放而修改动画速度的方式(小于1表示动画播放在角色缩放时呈反向缩放)。
PlayEmoteBindableFunction其他脚本可以调用这个函数以强制假设一个姿势。
[Pose]StringValue引用可播放的动画类别,如待机、跳跃、行走等。此对象可以作为任何数量的Animations的父对象。

这些Animations有一个WeightNumberValue),优先播放多种动画中的一种,同时假设姿势;通常用来增加待机和舞蹈姿势的多样性。

BodyParts

NPC Model中的BodyPart BasePart表示各种角色身体部位,并包含以下对象:

对象名称或 [类型]类型描述
AvatarPartScaleTypeStringValue确定该部件的缩放方式;值可以是ClassicProportionsNormalProportionsSlender
OriginalSizeVector3Value确定当角色缩放为1时该部件的大小。
[Attachment]Attachment定义一个相对于单个部件的点,脚本、效果和对象(如ToolAccessory)可以在定位时利用。
[Motor6D]Motor6D两个身体部件之间的动画关节。请注意,Animator依赖于Motor6Ds的名称,名称必须与创建动画时使用的Motor6Ds一致,因此请避免重命名此对象。
[Joint]WeldConstraint, Constraint, JointInstance两个身体部件之间的非动画关节。
[Sound]Sound常见于头部或HumanoidRootPart;播放受RbxNpcSounds脚本控制的装配中的声音。

Configuration

每个NPC在其层次结构中包含一个Configuration对象,该对象充当值对象的容器。这些对象由NPC脚本使用来调节各种行为。除非另有说明,否则这些适用于所有角色。

对象名称或 [类型]类型描述
DestroyOnDeathBoolValue在NPC死亡后不久导致整个NPC被销毁。禁用此选项可使ragdoll保持持久。
PatrolEnabledBoolValue使NPC在其起始位置周围徘徊。
PatrolRadiusNumberValue定义NPC将从其起始位置漫游的最大距离,假设PatrolEnabled为真。
RagdollEnabledBoolValue使NPC在死亡时变得松弛,而不是拆散。
AttackDamageNumberValue定义当NPC攻击时受害者失去多少生命值。仅适用于僵尸和士兵工具包。
AttackDelayNumberValue定义射击之间的最小秒数。仅适用于士兵工具包。
AttackModeNumberValue指定士兵将攻击的对象,基于tagging系统。仅适用于士兵工具包。
AttackRadiusNumberValue定义NPC在尝试攻击之前必须与潜在受害者之间的最大距离。仅适用于僵尸和士兵工具包。
ClipCapacityNumberValue定义士兵在需要重新装填之前可以发射的子弹数量。仅适用于士兵工具包。
ReloadDelayNumberValue定义在士兵的武器弹匣被重新装填之前必须经过多少秒。仅适用于士兵工具包。

分配标签

NPC脚本使用CollectionService标签来管理对其他角色和玩家的攻击性。可以按如下表中的方式分配各种标签:

  • 要将标签分配给另一个NPC,请使用其属性的标签部分将其分配给NPC的顶级Model

  • 要将标签分配给Player角色,您可以在StarterCharacterScripts中添加一个Script,并调用CollectionService:AddTag()。例如:


    local CollectionService = game:GetService("CollectionService")
    CollectionService:AddTag(script.Parent, "SoldierEnemy")
标签目的
SoldierEnemySoldierFriend确定士兵是否应该攻击另一个角色,基于其AttackMode配置值。当士兵的AttackMode设置为1时,其他角色必须标记为SoldierEnemy才能被视为可攻击目标。当士兵的AttackMode设置为2时,所有没有SoldierFriend标签的对象都被视为可攻击目标。当士兵的AttackMode设置为3时,这些标签会被完全忽略,士兵将会攻击所有角色。
ZombieFriend此标签用于僵尸确定其是否不应攻击某个角色。当应用时,僵尸对标记的角色变得和平。
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。