(本文作者 @对马骑马使用炎拳 )

今年年中的时候,《最后生还者2》引发了业界非常热烈的大讨论。

有关剧情、人物描绘的争议自然是最为集火的一环。可参看这里:

如何评价游戏《最后生还者2》?​www.zhihu.com

而除此之外,还有众多有关游戏的细节也确实让人印象深刻。比如下面这个绳子:

可以看到,图中的绳子可以做到和游戏中的环境进行实时交互,拉伸,紧绷等属性都能很好的展现,而艾莉本人也有对应的各种状态下的反应动作,实在是细节无限大。

那么问题来了。不说高度还原,有没有可能比较方便地在Unity中实现相对类似的效果呢?

还真有。在Unity商店搜索“Obi”,就可以找到“Obi Rope ”这款模拟绳子的插件。这款插件是由西班牙工作室“Virtual Method ”开发,他们于2002年成立,为许多欧美游戏大厂提供过技术支持。"Obi"系列则是这家工作室为Unity制作的,可实时模拟绳索,流体,布料和软体的插件。

这几款插件完全对的起它的价格

从商店直接下载Obi rope导入工程,可以看到官方在RopeAndRod文件夹下提供了10个案例学习,其中Crane(起重机)和Plectoneme(交缠螺旋)则是对应绳子的拉伸和旋转的使用场景,有点内味儿了。

Crane
Plectoneme

接下来我们可以看一看RopeAndJoint场景,这个案例比较详细的展示了Obi rope的用法。

首先自然是绳子,选中绳子,可以看到两条绳子都挂载到了名为Obi solver的物体下,Obi solver身上带有两个脚本“Obi Solver”和”Obi Fixed Updater”。

从官方文档中得知,Obi solver 负责模拟粒子的物理属性并执行约束,这句话有些抽象,但我们只要知道怎么用就好了,其中有三点很重要:

1:Obi solver 可以添加到任意GameObject中,同一场景允许运行多个。

2:绳子必须是Obi solver子级才能实时更新运动和仿真。

3: 每个solver独立与其他solver ,所以不同的solver 下的子物体不会互相影响,只有同一solver下的绳子才会相互反应。

不同solver下的的锁链不会产生交互

涉及Obi solver 的相关设置很多,这里不过多赘述,新建solver时选择默认的就好。

接下来看Obi Fixed Updater,顾名思义,这个组件会让solver下的子物体在FixedUpadte()期间更新。同样,你需要手动选择你希望运行的Obi solver添加到Updater中,不过obi很贴心,当你新建Obi solver时会自动添加到Updater的Solvers里。

新建的solver自动添加到场景中的Obi Solver下

Solvers 下面的两个参数,

Substep Unity physics,勾选上之后,该solver下的绳子能够与场景中的物体进行更精准的交互,一般默认勾选。

Substeps控制绳子的模拟精度,Unity中默认的timestep为0.02,假如在这儿设置Substep=4,那每次运行程序将会计算出0.02/4=0.005s的绳子的运动轨迹。总结下来就是,Substep值越大,模拟精度越高,程序性能越低。


接下来看绳子,也就是Obi Solver下的Obi Rope。每条绳子分别挂载了“Obi Rope”,”Obi RopeExtruded Renderer”,”Obi Path Smoother”以及多个”Obi Particle Attachment”组件

先来看看Obi Rope组件 ,Obi Rope 中比较重要的功能就是绳子编辑器Blueprint,Obi 提供了一些不同种类的绳子资源,这里我们选择“Joint rope1”就好,之后点击Edit path ,你就可以在场景中对绳子进行编辑。

非常方便,即刻上手

你也可以按住shift,同时选择多个节点进行操作,Path Editor的其他参数解释中,tangent mode 三种模式同样很好理解,如下图:

Thickness控制绳索在该点的粗细,mass控制粒子的质量,phase是个很重要的属性,可以后面结合Obi Collider一起说。

第二个组件是Obi path Smoother ,这个组件决定绳子的渲染

第一个参数Decimation ,官方文档用了一张图进行解释,你可以在Unity场景中选择Wireframe模式进行观察,会发现Decimation 值越大,绳子的面片越少,性能自然也会得到提升。

第二个参数Smoothing,值越大绳子越滑。

第三个参数Twist,决定每个绳索链结部分的扭曲度数,如下图。

第三个组件是 Obi RopeExtruded Renderer,Obi一共提供了四种渲染器,该渲染器是创建新的Obi Rope 时默认的。此处也不展开说(好麻烦哈哈),有兴趣的可以查阅文档自己探索。(文档地址文末)

最后一个组件是Obi Particle Attachment,这个组件用于将绳子的一端粘合到另外一个对象上,使用方法也很简单,选择绳子的的一个粒子组,并给这个粒子组指定对应的粘合物体,绳子的这个粒子组所在的位置就会粘合在这个物体上并跟随运动。

打开粒子编辑器,可以看到绑定的particle group的名字

Particle Attachment有两种Type " Dynamic"和"static",此场景中的该组件都选择的是”Dynamic“,官方文档中也对这两种模式进行了详细说明:

先来看static模式,官方的解释是static type 下,组件会完全取消激活被选中的粒子的动力学。实际上就是粒子的运动的惯性对其绑定的物体不会有任何影响,此时该粒子的运动完全由绑定物体决定。

再来看Dynamic模式就好理解了,选择Dynamic后组件会和粒子的运动惯性互相影响,选择了Dynamic 后会多出两个参数,"Compliance"决定连接点的牢固性,Compliance =0,连接点会非常牢固,Compliance值越大,连接点越灵活;"Break threshold”=连接点可以不被扯断的最大的力。

最后让我们看下两种模式下的GIF图,来体会其中的不同:

将连接球体的两个粒子调为static,下方粒子组不对球体产生作用力,直接被拉到地上
再改回dymatic ,绳子也对球体产生作用力

需要注意的是:Target的物体需要带有Obi collider组件。


在案例中,绳子和场景中的地板墙壁都添加了 Obi Collider和Obi Rigidbody, Obi Collider的作用就是让绳子能与其他元素发生碰撞。除了Polygon Collider2D, Obi支持几乎所有的Unity 碰撞器。

如果你希望能忽略一些特定的碰撞体,就可以用到Phase(碰撞阶段),每个obi Collider都具有phase属性,而Obi Rope也同样具有phase 通道,当Obi collider的 phase 和Obi rope的值相同时,他们将彼此忽略。默认情况下,Obi Collider 的phase=0,Obi rope的phase = 1

需要注意的是,在不同Obi solver 下创建的Obi 物体,就算phase值相同也不会产生交互效果。

Obi Rigidbody仅包含一个参数,选中"Kinematic For Paticle"后,物体不会被绳子影响,但绳子还是能感受到物体的存在(老二刺螈了)。

文章的最后,用Unity娘来稍微致敬下(拿着锁链似乎某种属性觉醒了的感觉):

Obi 官方文档:

Obi Physics for Unity​obi.virtualmethodstudio.com

Obi 工作室博客:

Virtual Method's Blog - News and articles from our studio​blog.virtualmethodstudio.com


PS :可能有朋友觉得Obi系列插件太贵,只是想学习一下,Unity商店有另外一套模拟流体、弹性布料的插件Flex,由英伟达制作,效果同样很爆炸,而且是免费的,不多说直接上图:

感兴趣的同学可以戳下面的视频,非常详细的介绍了这个插件:

【萌新图形学】简单看看新一代的物理引擎——FLeX简介_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

(本文作者 @对马骑马使用炎拳 )

——分割线——

欢迎加入游戏开发群欢乐搅基:1082025059

对游戏开发感兴趣的童鞋可戳这里进一步了解皮皮关:http://www.levelpp.com/

unity 查找所以物体_用Unity来实现一下绳子效果——Obi Rope插件介绍相关推荐

  1. unity 查找所以物体_【技术】不可思议之梦蝶制作人:如何使用Unity把游戏从PC移植到Switch...

    5月11日,由Unity主办的行业开发者大会Unite Shanghai 2019在上海国际会议中心召开,作为推出过<鲤>.<不可思议之梦蝶>的天津队友游戏的制作人,李喆就分享 ...

  2. unity查找子物体、子节点、获取子节点对象脚本,添加子节点脚本,添加父节点脚本

    分享一个代码管理片段的代码,主要是用于查找子物体,控制子物体等等的. 静态代码片段,便于调用. 不做太多的解释,直接上代码,每个方法都有注释. 有任何问题直接留言,看到会回复 QQ群 20701909 ...

  3. unity 删除子节点_【Unity文档】Realtime GI介绍(一)

    * 介绍 Unity中,有两种GI的技术:烘焙(Baked)和预计算实时(Precomputed Realtime)全局光照,这篇是讲预计算实时部分的 目录 如何决定光图分辨率 光图中的Charts是 ...

  4. unity 3d游戏开发_使用Unity 5开发3D游戏

    unity 3d游戏开发 If there's one thing cooler than playing games, it's building games. 如果有比玩游戏更酷的一件事,那就是构 ...

  5. unity实现绳子效果(绳索插件Obi Rope)

    Obi 官网 Obi 论坛 插件下载 插件原理: 绳索的实现是通过一些约束将粒子链接起来而构建的.由于粒子没有方向(只有位置),因此无法模拟扭转效果,并且绳索无法保持其静止形状.但是,可以将绳索撕裂/ ...

  6. unity添加对象实例_【Unity】6.3 通过 C# 脚本创建和访问游戏对象

    分类:Unity.C#.VS2015 创建日期:2016-04-16 一.简介 在游戏开发过程中,脚本不但需要访问脚本所在的游戏对象的组件,还经常需要访问和控制真他游戏对象.另外,根据项目需求,还可能 ...

  7. unity保存游戏数据_在Unity中保存和加载玩家游戏数据

    unity保存游戏数据 In this tutorial, we'll learn to implement Save/Load game functionality in our game. We ...

  8. unity生成预制体_【Unity·月之泪复刻】Bloom+摇曳+可交互草地

    最近在做机械纪元的同人游戏,作为名场面-月之泪花田必须有姓名→ω→ 经过两天的缝合(不是),目前效果如下: awsl 对比一下原版-awsl: 机械纪元中的月之泪花田 场景包含: 草地摇曳效果 角色与 ...

  9. unity项目源码_在Unity中使用protobuf

    Protocol Buffers (通常简称为protobuf) 是Google开发的一种格式,这种格式与开发语言无关.与运行平台无关,用于序列化结构数据,并且很容易扩展.这种格式可以用于通信协议.数 ...

最新文章

  1. 开发管理 (2) -规划项目
  2. java导出excel_如何导出你和女票的微信聊天记录
  3. python csv读取数据 去掉标题-Python读csv文件去掉一列后再写入新的文件实例
  4. 画瀑布图_道砟石上的庐山瀑布惟妙惟肖
  5. 使用ctime.h头文件来控制程序延时秒数
  6. python控制代码使用的gpu
  7. SQL Server 视图 语句
  8. 疲劳检测方法总结_计算机视觉
  9. java经典算法(三)---zws
  10. python爬虫:批量下载qq空间里的照片(二)
  11. mac地址储存在计算机的内存,mac地址存储在
  12. Fluent Mybatis 牛逼
  13. BAT脚本实现FTP文件自动传输
  14. 转载_ASK,OOK,FSK,GFSK简介
  15. wincc 数据库的连接方法
  16. C Primer Plus 第五章 复习题编程练习 答案
  17. 反射 Reflect Class 基础 API MD
  18. 关于Qt程序运行时出现:QSocketNotifier: Invalid socket 11 and type 'Read', disabling...
  19. mysql-分库分表概述
  20. 二维数组中查找指定数据

热门文章

  1. (网页)java数组去重总结(转)
  2. 《Windows驱动开发技术详解》之HelloDDK
  3. laxcus的新功能:支持表跨数据库操作
  4. 文件操作(上传,下载,限制)
  5. FAIR 何恺明、Piotr、Ross等新作,MAE才是YYDS!仅用ImageNet1K,Top-1准确率87.8%!
  6. GitHub人脸属性编辑神器横空出世!让你爱上异性的自己!
  7. 智能化改造!AI技术在传统企业大有可为!
  8. OpenPCDet:点云3D目标检测开源库
  9. 谷歌 AI 的2019:日均2篇论文,纵横16大方向,一文汇集重要开源算法
  10. 五个很厉害的 CNN 架构