NPC(非玩家角色)可以为体验添加大量深度。以下所有 NPC 都可以通过视觉进行自定义,其行为已修改,僵尸/士兵甚至可以通过使用标签系统来防守一个区域,攻击玩家或其他角色来设置行为。
要在游戏中使用 NPC:
在 NPC 的物品页面上,单击绿色 获取 按钮,确认交易。
在 Roblox Studio 中,打开 工具箱( 视图 → 工具箱 )。
选择您的工具箱 库存 部分。
找到 NPC 并单击以将其添加到地场景。
角色结构
每个 NPC 模型通常包含以下对象:
对象名称或[类型] | 类型 | 描述 |
---|---|---|
动画 | Folder | 包含 Animations , 例如 AttackAnimation 或 DeathAnimation . |
初始姿势 | Folder | 包含姿势信息。 |
动画 | Script | 在角色骨架上加载并播放动画。请参阅动画获取更多详情。 |
[配件] | Accessory | 可能有多个Accessories为NPC提供帽子、武器等 |
生命值 | Script | 通常会在一段时间内恢复 Humanoid 生命值。禁用此功能将防止角色恢复生命值。 |
人形怪物 | Humanoid | 管理Humanoid相关属性,例如Humanoid.Health、Humanoid.WalkSpeed、Humanoid.DisplayDistanceType等 |
NPC | Script > | 定义特定角色的行为,例如巡逻、攻击等父辈以下对象: 女仆 ( ModuleScript ) 定义了一个用于释放使用的资源的有用类。: 布娃娃 ( ModuleScript )定义了一个函数,将角色转换为一个松散的物理影响的身体(父辈一个 RigTypes ModuleScript 定义了几个助助函数). |
RbxNpcSounds | Script | 定义并管理与角色音效相关的行为,例如奔跑、死亡等 |
身体部件 | BasePart | 各种角色身体部件通过 Motor6D 或约束对象附加到 HumanoidRootPart 或邻近身体部件。请参阅身体部件获取更多详情。 |
人形根部件 | BasePart | 被视为装备根源的特殊隐形部骨架;这也是角色的 PrimaryPart 的 Model 。 |
配置 | Configuration | 包含各种调整各种行为的值对象。请参阅配置获取更多详情。 |
设计注释
当使用 NPC 套件时,请记住以下设计注意事项:
NPC 的视觉外观可通过添加/修改各种[BodyParts]对象以及添加 Accessory 对象来进行自定义。
士兵、喷血僵尸和 NP-C 9000 机器人使用 Rthro 作为他们的装备基地。然而,RO-01机器人使用了修改的Rthro基地,该基地使用 上躯干 连接到推进部件,使用WeldConstraints。这样使用简单的连接可以让你为角色包含额外的几何图形,而不改变原始的基础骨架。
在基本水平等级,NPC 动画可以通过修改 AnimationId 现有动画对象的 动画 位置或那些位于 动画 文件夹中的动画来进行自定义。这样的变化实际上是一种资产交换——要更改更细致的细节,您可以创建现有动画的自定义副本,以在不同条件下播放动画,您可以直接编辑 动画 或 NPC 脚本。了解更多信息,请参阅动画。
动画
在 NPC 中的动画 处理动画相关配置,包含以下对象:
对象名称或[类型] | 类型 | 描述 |
---|---|---|
缩放减震百分比 | NumberValue | 定义了如何修改动画速度,当角色缩放时(少于 1 意味着动画播放速度与角色缩放速度相反)。 |
播放表情 | BindableFunction | 这可以由其他脚本调用,以强制假设姿势。 |
[姿势] | StringValue | 引用闲置、行走跃、步行等可播放的动画类别该对象可以父辈任意数量的 Animations 。 这些 Animations 父级将 重量 ( NumberValue ) 优先播放一个多个动画中的一个,假设姿势时;通常用于添加空闲和舞蹈姿势的多样性。 |
身体部件
NPC 中的身体部分 代表各种角色身体部分,包含以下对象:
对象名称或[类型] | 类型 | 描述 |
---|---|---|
虚拟形象部分比例类型 | StringValue | 决定零件会被缩放到什么程度;值可以是 经典 , 比例正常 或 比例纤细 。 |
原始尺寸 | Vector3Value | 当角色缩放为 1 时,决定零件的大小。 |
[附件] | Attachment | 定义与个别零件相关的点,可以在定位时使用的脚本、效果和对象,例如 Tool 或 Accessory 。 |
[Motor6D] | Motor6D | 两个身体部位之间的动画连接。请注意,Animator 依赖于 Motor6Ds 的名称与在创建动画时使用的 Motor6Ds 保持一致,因此避免重命名此对象。 |
[共同] | WeldConstraint , Constraint , JointInstance | 两个身体部位之间的非动画连接。 |
[音效] | Sound | 常见于头部或 HumanoidRootPart ; 播放从装备中发出的声音,由 RbxNpcSounds 脚本控制。 |
配置
每个 NPC 包含在其等级结构中的 Configuration 对象,作为值对象容器。这些被 NPC 脚本用于调整各种行为。除非另有说明,这些适用于所有字符。
对象名称或[类型] | 类型 | 描述 |
---|---|---|
在死亡时摧毁 | BoolValue | 导致整个 NPC 在死亡后很快被摧毁。禁用此功能以确保布娃娃持续存在。 |
已启用巡逻 | BoolValue | 使 NPC 在其起始位置周围游荡。 |
巡逻半径 | NumberValue | 定义 NPC 从起始位置到达最大距离的最大距离,假设 巡逻启用 是真实的。 |
布娃娃启用 | BoolValue | 使 NPC 在死亡时跛子,而不是分裂。 |
攻击伤害 | NumberValue | 定义受到 NPC 攻击时会损失多少生命值的受害者。仅适用于僵尸和士兵套装。 |
攻击延迟 | NumberValue | 定义了射击之间的最小秒数。仅适用于士兵套件。 |
攻击模式 | NumberValue | 指定士兵将攻击什么,基于 标记系统 。这仅适用于士兵套件。 |
攻击半径 | NumberValue | 定义 NPC 在攻击之前必须从潜在受害者那里获得的最大距离。仅适用于僵尸和士兵套件。 |
片段容量 | NumberValue | 定义士兵在需要重新装弹前可以发射多少子弹。仅适用于士兵套件。 |
重新加载延迟 | NumberValue | 定义在士兵的武器弹夹重新装弹之前需要多少秒。仅适用于士兵套件。 |
分配标签
NPC 脚本使用CollectionService来管理对其他角色和玩家的攻击。从下表中可以分配以下各种标签:
要将标签分配给另一个 NPC,请使用其属性的 标签 部分或 Studio 的 标签编辑器 将其分配给 NPC 的顶级。
要将标签分配给 Player 角色,您可以通过添加 Script 到 起始角色脚本 来进行 CollectionService:AddTag() 调用。例如:
local CollectionService = game:GetService("CollectionService")CollectionService:AddTag(script.Parent, "SoldierEnemy")
标签 | 目的 |
---|---|
士兵敌人 或 士兵朋友 | 决定是否基于战士的 攻击模式 配置值,应该攻击另一个角色。当士兵的 攻击模式 设置为 1 时,其他角色必须被标记为 士兵敌人 才能被认为可攻击。当士兵的 攻击模式 设置为 2 时,所有没有 SoldierFriend 标签的对象都被视为可攻击的。当士兵的 攻击模式 设置为 3 时,这些标签将被完全忽略,士兵将攻击所有角色。 |
生化人朋友 | 这个标签由僵尸用于确定是否不应该攻击角色。应用时,僵尸对标记的角色变得顺从。 |