mcpField
R
roblox-physics

roblox-physics

github.com/gamedev-skills开发5.4k4.1k 次安装1 天前更新
代码仓库

关于 roblox-physics

roblox-physics 是面向 Roblox 开发者的技能,涵盖装配体、约束、碰撞、查询和网络所有权。它帮助区分物理模拟、角色控制、命中检测与视觉运动,以选择合适的实现方式。

主要功能

  1. 01选择模拟或查询方式
  2. 02配置碰撞与查询策略
  3. 03应用装配体力和约束
  4. 04管理网络所有权
  5. 05控制查询成本与资源生命周期
  6. 06验证多人环境下的物理表现

适用场景

  1. 01替换不可靠的触碰式命中检测
  2. 02排查抖动或卡住的机制
  3. 03构建由力或约束驱动的运动
  4. 04验证客户端所有物理的游戏影响

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill roblox-physics

安装后在 Claude Code 中输入/roblox-physics确认已加载。

附带文件agents/openai.yamlreferences/queries-and-ownership.md

详细介绍

Roblox 物理

在模拟、角色控制、命中检测和纯视觉运动之间谨慎选择; 它们是不同的任务。面向 Roblox 正在推出的平台 API。搭配 physics-tuning 使用,可获得与引擎无关的稳定性和手感。

适用场景

  • 用于 BasePart 装配体、约束、碰撞/查询策略、射线/重叠查询、力、冲量、移动的物理对象、网络所有权或物理清理。
  • Touched 不可靠或存在安全风险、部件穿透或抖动、机构在锚定后失效,或出现旧式 BodyMover 用法时使用。

不适用场景: 普通 Humanoid 生命周期/控制属于 roblox-characters;远程验证属于 roblox-networking;装饰性 UI/世界运动可能只需要补间。

首先确定系统

目标机制
持续的物理交互未锚定的装配体 + 现代约束/力
瞬时物理变化ApplyImpulse / ApplyAngularImpulse
运动学平台/路径受控枢轴/变换,并明确乘客策略
角色移动Humanoid/自定义角色控制器(roblox-characters)
权威命中检测使用过滤器和游戏逻辑验证的服务器射线投射/重叠查询
装饰性拖尾/后坐力本地视觉运动;不具备游戏逻辑权威性

工作流

  1. 检查机构。 在 Studio 中可视化装配体、锚点、约束、碰撞组、无质量部件和网络所有者。确定装配体根部及预期的权威方。
  2. 定义交互策略。 编写碰撞组矩阵,并分别决定 CanCollide、CanTouch 和 CanQuery。这些标志不可互换。
  3. 选择模拟或查询。 不要把 .Touched 当作通用命中检测器。对路径/直线使用射线,对体积使用重叠查询;只有确实需要物理响应时才使用模拟接触。
  4. 在装配体级别施加运动。 施加在部件上的力会影响其所属装配体。酌情使用现代 LinearVelocity、AngularVelocity、VectorForce、AlignPosition 和 AlignOrientation 约束;修改该系统时,迁移弃用的 BodyMover。
  5. 有意设置所有权。 必要时,让服务器拥有对游戏玩法至关重要的松散装配体;客户端所有权可提高响应速度,但绝不能作为游戏逻辑结果的授权依据。
  6. 限制成本和生命周期。 重用查询参数,限制查询频率/结果数量,移除临时约束/附件,并断开事件监听器。
  7. 在负载和多人环境下验证。 测试锚定/取消锚定转换、极端质量、碰撞矩阵、快速运动、多个客户端、所有权变更、流式加载和清理。

模式:带过滤的服务器射线投射

local Workspace = game:GetService("Workspace")

local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = {shooterCharacter}
params.IgnoreWater = true
params.CollisionGroup = "WeaponQuery"

local direction = aimDirection.Unit * MAX_RANGE
local result = Workspace:Raycast(muzzlePosition, direction, params)
if result then
    local model = result.Instance:FindFirstAncestorOfClass("Model")
    local humanoid = model and model:FindFirstChildOfClass("Humanoid")
    if humanoid and serverCanDamage(shooter, model, result.Position) then
        humanoid:TakeDamage(serverWeaponDamage(shooter))
    end
end

服务器必须根据服务器已知的角色/武器状态验证起点和方向;不要接受任意客户端起点,并把射线投射本身视为验证。

模式:明确策略的重叠体积

local params = OverlapParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = {sourceCharacter}
params.CollisionGroup = "DamageQuery"
params.MaxParts = 64

local seen: {[Model]: boolean} = {}
for _, part in Workspace:GetPartBoundsInBox(hitboxCFrame, hitboxSize, params) do
    local model = part:FindFirstAncestorOfClass("Model")
    if model and not seen[model] then
        seen[model] = true
        validateAndApplyHit(model)
    end
end

边界查询使用包围盒,可能包含同一目标的多个部件;请按需去重并执行精确/游戏逻辑检查。若要使用精确几何,仅在额外开销合理时使用 WorldRoot:GetPartsInPart(part, overlapParams)。请注意,OverlapParams.RespectCanCollide 决定查询遵循 CanCollide 还是 CanQuery——应有意设置此项,否则它会悄然覆盖下方的标志策略。OverlapParams.Tolerance 控制接触容差。

装配体、力与所有权

  • 焊接的部件会组成一个刚性装配体;力、冲量、速度、质量和所有权均作用于该装配体。锚定部件会改变模拟和所有权,并可能使装配体的质量实际上变为无限。
  • 一次性改变状态时使用冲量;需要持续控制时使用力或速度约束。设置 AssemblyLinearVelocity 会立即改变状态,并非连续力模型。
  • 创建或修改机构时,优先使用附件和现代约束,而不是 BodyPosition、BodyVelocity、BodyGyro 及其他已弃用的 BodyMover。
  • 自动所有权可能会将附近未锚定的装配体转交给客户端。对关键对象谨慎使用 SetNetworkOwner(nil),然后评估响应速度和服务器成本。在 Studio 中可视化网络所有者。
  • 客户端所有者可以操纵物理结果和 .Touched 检测结果。服务器会独立验证重要的命中、位置、时机和权限。

常见故障

症状可能原因解决方法
焊接机构无法移动一个部件已锚定检查整个装配体;仅锚定有意设为世界根部的部件
力的效果过强或过弱未考虑装配体质量检查 AssemblyMass;根据预期加速度调整力或冲量
快速投射物未命中离散触碰采样/穿透使用扫掠查询 — WorldRoot:Blockcast()、Spherecast() 或 Shapecast() — 并结合 physics-tuning;不要只依赖 .Touched
射线命中发射者/特效未设置过滤条件/碰撞组复用明确的参数和查询组
同一目标受到多次伤害重叠查询返回多个身体部件按目标模型去重,并实施攻击 ID/冷却
漏洞利用者触发不可能发生的触碰客户端拥有相关物理对象在服务器端查询/验证上下文;谨慎设置所有权
隐形触发器会阻挡对象或无法查询混淆了三个标志分别设置 CanCollide、CanTouch 和 CanQuery
机构泄漏附件缺少临时约束的生命周期管理一并管理和销毁约束、附件及连接

资源

  • 阅读 references/queries-and-ownership.md,了解碰撞/查询矩阵、装配体调试、所有权安全、迁移选择和物理验证矩阵。

相关技能

  • physics-tuning — 时间步长、抖动、穿透、质量比和稳定性方法。
  • roblox-characters — Humanoid/自定义移动和重生生命周期。
  • roblox-networking — 对客户端请求的物理操作进行权威验证。
  • roblox-studio-workflow — 可视化、Output 和多客户端验证。

主要参考资料

  • https://create.roblox.com/docs/physics/assemblies
  • https://create.roblox.com/docs/physics/network-ownership
  • https://create.roblox.com/docs/workspace/raycasting

评论

支持 Markdown