【译】FarseerUnity教程-第三部分
前言:Farseer是Box2D的C#实现,而FarseerUnity是Farseer的Unity版本插件,适用于4.X版本,在资源商店可以免费下载。
翻译出处: http://www.catsinthesky.com/blog/article/2012/04/8/farseer-physics-box2d-and-unity-part-3
现在我们拥有基本物体、凹面物体和链接,碰撞过滤怎么样?总有一天在你的游戏中你会到达一个开发台阶:“特定的物体不应该相互碰撞”,或者“A组”应该避免和“B组”碰撞。这时碰撞过滤就该介入了。
我喜欢Farseer物理引擎从Box2D中继承这个功能的方式。你只需要设置碰撞组而不是给每一个装置设置硬编码的比特标志位。一个装置可以属于0到多个组而且它能够和你希望的任意组碰撞。当我把它移植到unity中时,我避免使用unity的层和标签因为这两个属性都在别的地方有很多用处,但是它也不能是一种自制的硬编码解决方案。
现在,这里有一个新的设置界面。现在这里只有设置碰撞器分类名字的选项,但是我计划把所有设置定义在Farseer物理引擎的Setting.cs文件中(这样你就不用在代码中改变它们了)。
因为玩家控制台不能很好地在开发者之间共享而且所有终端用户都可以编辑它们导致安全性问题,我也决定不使用玩家控制台(和编辑控制台)。这个设置被所有其他脚本编辑。
为了开始这段教程,下载最新的包然后打开下图标明的场景(下图)。
考虑便利性,碰撞组已经设置好了。它们位于Assets/Tests/CollisionGroups。要创建一个新组,在文件夹上右键然后选择Create/FarseerUnity Collision Group(下图)。
碰撞组资源非常简单。它只是一组你可以决定这个组从属的分类(或多个分类)和这个组能和谁碰撞的复选框(下图)。这一步节约了你为每一个形状定义的时间。
现在,在“静态”物体中,有三个物体是这个场景的地面和墙,找到FSShapeComponent的“过滤碰撞”参数,把它改为“预设文件”(下图)。
把“地面”碰撞组资源拽到目标字段(下图)。
现在,在“complexBody”物体上也有一个FSConcaveShapeComponent需要设置(下图),把“常见物体”碰撞组赋给它。
别忘了点击“生成凸面形状”按钮(因为你改变了它的参数)。
设置“Sphere00”使用“橘子”组,“Cube”使用“矩形”组。然后复制所有动态物体几遍来测试碰撞过滤,然后点击运行!
这就是第三部分。下一部分教程会涵盖碰撞事件。