全部模型资源
  • 全部模型资源
  • - 交通工具
  • - 动物昆虫
  • - 场景\道具模型
  • - 建筑模型
  • - 植物模型
  • - 武器模型
  • - 独家资源库
  • - 科幻模型
  • - 角色动画库
  • - 角色模型
  • 游戏开发知识博客

Grabbit 2 深度解析:如何在 Unity 编辑器内模拟物理

Grabbit 2 演示 GIF 动图,Unity 编辑器内桌面上多个食物模型在按下

Grabbit 2 核心演示:Unity 编辑器内一键触发物理模拟,桌面食物自动落入木碗(动画 GIF)。

简介

Jungle 工具系列的独立开发者-Will,为大家介绍刚刚发布的 Grabbit 2。Grabbit 2这是一款自 2021 年起就让游戏开发者能够在 Unity 中使用物理进行关卡设计和布景的插件的彻底重写版。下面来看看它的工作原理、第一版哪里做错了,以及重写时有哪些改动。

理念:为什么它比听起来更难

Grabbit 会把选中的物体放进编辑器内一个活跃的物理模拟中。物体由物理驱动,就像在运行时一样,只不过这一切发生在编辑模式下,物体上不需要任何碰撞体或刚体。

完成后,Grabbit 会把结果写回变换矩阵并清理一切。最后这一步比你想的要难得多:

  1. 你必须在编辑时独立驱动 Unity 的物理世界,不能干扰场景的其他部分或项目的物理设置。
  2. 你必须为任意网格动态生成准确的碰撞体,因为被放置的物体可能没有碰撞体。
  3. 一切必须是非破坏性的——如果出了任何问题,场景必须完全恢复到原样。
  4. 在大场景(10k+ GameObject)中,你仍希望工具加载快、响应快:给所有网格创建碰撞体和刚体需要几秒钟。

Grabbit 如何处理

Unity 允许你将物理切换到手动模式,没有任何东西自动 step,时钟归你所有。Grabbit 利用这一点,完全在编辑时间内运行自己的模拟循环。当你抓取选区时,有两件事很重要:速度和隔离。

速度方面,Grabbit 2 预分析场景,只拉入选区附近的对象,所以无论场景多大,加载都快且保持快(Grabbit 1 是一次性加载全部)。

隔离方面,Grabbit 在步进模拟前禁用所有其他刚体并记录你的物理设置,在你完成后全部恢复——即使中间出了什么问题。其他对象从不移动,你的项目设置原样归还。

Place/Move 演示 GIF 动图,Unity 编辑器场景中 Grabbit 2 工具栏与 Place/Move 模式面板
Place/Move 模式演示:Grabbit 2 工具栏与场景视口的物理放置功能动画演示

碰撞体很棘手

动态创建的碰撞体的问题在于,PhysX 只允许凸碰撞体存在于动态对象上,所以椅子碰撞起来像个楔子,甜甜圈碰撞起来像个圆盘——这对于布景来说不太好,布景的核心就是让东西看起来自然地安顿下来。

Grabbit 用凸分解(convex decomposition)解决这个问题:它把凹网格分解成几个凸块,这些凸块合在一起能近似真实的形状。在 Grabbit 2 中,这个过程在后台自动完成,所以碰撞体烘焙时你不会有明显的等待时间。

它内置三种碰撞体创建策略,你可以选择适合自己项目的那一种:

  • Balance(平衡):使用基于体素的快速分解。通用可靠的默认选择。
  • Precision(精度):使用更先进的、感知碰撞的分解方法,能在复杂形状上保留更多凹面细节。
  • Performance(性能):跳过分解,用简单原始体(盒子、球、胶囊、圆柱)拟合网格。最便宜的模拟开销,简单道具通常够用。

在精确的烘焙还在后台运行时,Grabbit 会切换到一个快速近似版本,所以你永远不会卡住。

凸分解演示

下面三组示例展示了同一模型用三种策略得到的不同碰撞体分解:

兔子模型多色块凸分解网格(4 色不同碰撞体)

凸分解演示:兔子模型被自动分解为 4 个不同颜色的凸块碰撞体,组成完整的物理外形。

台灯模型多色块凸分解网格(5 色不同碰撞体)

 

吉他模型多色块凸分解网格(4 色不同碰撞体)

 

眼镜模型多色块凸分解网格(5 色不同碰撞体)

 

Grabbit 2 新功能:为运行时烘焙碰撞体

一旦你生成了碰撞体,下一步显而易见、但原版从未做的:把它们变成永久的。在 Grabbit 2 中,你可以在场景、Prefab 模式或 Project 窗口中右键任何对象或预制体,选择 Bake Convex Colliders。Grabbit 会把烘焙好的碰撞体写回对象上。

这些碰撞体会随你的 Build 一起发布,运行时不需要任何 Grabbit 代码。你也可以在碰撞体库中浏览你烘焙过的所有碰撞体。

Bake Colliders 演示 GIF 动图,Unity Project 窗口中 Grabbit Colliders 烘焙界面(Source/Total/Matches/Generated 几列)

Grabbit 2 新功能演示:在 Project 窗口或 Prefab 模式下右键选择 Bake Convex Colliders 烘焙碰撞体到对象(动画 GIF)。

第一次哪里错了,我修了什么

Grabbit 1 是能用的,但架构上是一个约两千行的单体工具,它有你预期从有机生长的代码中会得到的所有故障模式。鉴于对这类编辑器工具的兴趣正在增长,诚实的经验教训可能是本文最有用的部分。

会留下烂摊子。Grabbit 的整个模型是”添加临时物理,模拟,移除”。如果编辑器在编辑过程中重新编译你的脚本或崩溃了,那次清理可能没运行,留下流浪的刚体或被改过的设置。Grabbit 2 会记录足够的状态以识别中断的会话,下次加载时检测遗留的物理并自动恢复你的对象。如果万一漏了什么,还内置了一键清理。

在大场景里变慢。没有空间结构,成本随着规模急剧增长。Grabbit 2 维护一个持久的空间缓存,池化临时碰撞体而不是每次抓取时分配,并行烘焙,并且只模拟你选区附近的对象。

撤销不可靠。物理驱动的编辑正是你最希望能放心撤销的东西。在 Grabbit 2 中,每一个变更都走 Unity 的 Undo 系统,所以 Ctrl+Z 表现得完全符合预期。

它住在一个编辑器窗口里,每次去那个窗口都会把你拉出场景。切换上下文耗费时间。Grabbit 2 与场景工具栏集成,你可以停靠它,所有东西都留在上下文中。

这些都不炫,但它们是一个聪明的 demo 和一个你敢把真实项目托付给它的工具之间的差距,也是为什么这次重写值得从头开始的原因。

Scatter Explode 演示 GIF 动图,Unity 场景中木桌与国际象棋被圆形范围向外散开,右侧 Grabbit 2 工具栏

Scatter: Explode 演示:圆形范围内物体被向外随机散开(动画 GIF)。

五种模式:完整的关卡设计工具箱

交互部分被组织成五种模式,每种都是用不同方式移动物体,并且每一个都是带有自己 Scene View 覆盖层的原生 Unity 编辑器工具。每个快捷键都是真实的、可重新绑定的 Unity 绑定,Space 是各模式下的主要操作键。

  • Select(选择):在不触碰 Hierarchy 的情况下构建工作集:按体积框选、按屏幕所见选中,或从当前选择开始,然后按相同网格、相似尺寸或相同停靠高度筛选。
  • Create(创建):从加权集合中生成道具,或复制你的选择,让物理在它们落地时自然安顿。可以沿直线、样条、环形或体积成排铺放副本。
  • Place(放置):主要模式——移动物体使其沿表面滑动并避免重叠,或精确点住物体上任一点来抓取它(比如精确安放椅子腿)。
  • Arrange(排列):一键整理——对齐到直线或曲线、整平到共享平面、统一朝向,或推开重叠解除碰撞,全部由 PhysX 驱动。
  • Scatter(散布):与排列相反——随机化、从爆破球向外爆开、挤压成堆,或轻微错位每件物体获得微妙变化,也都是物理驱动的。
Scatter Cramp 演示 GIF 动图,Unity 仓库场景中所有箱子被物理挤压成一堆

Scatter: Cramp 演示:场景中所有箱子被物理挤压成一堆(动画 GIF)。

可选的 AI 挂钩

对于在 Unity 中使用 AI 助手的团队,Grabbit 2 可以选择性地将其操作暴露为助手可调用的工具,通过开放的模型上下文协议(Model Context Protocol)。实际上,这意味着你可以让你的助手放置或散布一组道具,Grabbit 会运行真正的物理操作并正确地安顿它们,而不是助手凭空猜测坐标。它完全是可选的——除非你自己安装了 MCP 主机,否则集成是未激活的,仅在编辑器中运行,并且不会给你的 Build 增加任何东西。

Place Align 演示 GIF 动图,Unity 中东风格室内场景中多个托盘在 Align to Average 操作下整齐对齐成排

Place: Align 演示:托盘通过 Align to Average 操作整齐对齐成排(动画 GIF)。

未来方向

开发 Jungle 的工具,首先我是游戏开发者,每天用 Grabbit 来更快地制作自己的游戏。这也是它持续改进的真实原因——我自己也想要它。Grabbit 2 要求 Unity 6;Grabbit 1 仍可让使用 Unity 2022.3 及以上版本的项目使用。

评论留言