【译】FarseerUnity教程-第一部分
前言:Farseer是Box2D的C#实现,而FarseerUnity是Farseer的Unity版本插件,适用于4.X版本,在资源商店可以免费下载。
翻译出处:http://www.catsinthesky.com/blog/article/2012/03/5/farseer-physics-box2d-and-unity-part-1
你可能在奇怪为何unity自带了Physx的一个版本,为何我还要使用一个物理引擎插件是吧?好吧,unity自带的Physx版本适合3D游戏和大部分的2D游戏,但是当你的游戏是基于物理的,你就要在使用需要很多改动和工作区的Physx和使用一个健壮的2D物理引擎之间做出选择。
举个例子,在Physx中实现浮力并不简单。最有效的方法是在你的物体上附上一个网格(对于2D游戏这就是游戏结束)然后运行一个自定义脚本基于附上的网格计算水下部分。这个脚本会增加一个推动力去模拟浮力。想象一下,在你的2D游戏中只是为了模拟浮力为每一个物体附上3D网格。花费了很多时间而且网格永远不会用来渲染(无论如何,这是网格的真正用途)。在Farseer/Box2d中,这只是一行代码的事!
Farseer物理引擎基本上就是一个C#版的Box2D。我可以说这是包含能让你快速做出东西的激素的Box2D。当你需要基本形状时,这里有很多工厂类供你使用。为了开始我们的演示,下载这个unity包(需要unity3.5)。我放置了核心部分和做了一些我们场景中物体的组件。创建一个新的unity3D工程(#1)。
#1
导入你刚刚下载的包。现在,创建一个新场景。设置摄像机为正交(我设置尺寸为27)然后创建一个空物体。给这个新物体加上FSWorldComponent。它会是运行物理引擎的东西(#2)。
#2
因为在unity中Y轴正向为上所以默认重力是负的。
现在创建一个方块,把他缩放到足够大小,我们要拿它做地面。现在把FSBodyComponent附在它身上(#3)。设置身体类型为静态。
#3
现在有三种方式来设置一个物体的形状:
1 直接给这个物体添加FSShapeComponent和FSBodyComponent然后使用unity的碰撞器来产生形状。
2 创建一个子物体然后给它附上碰撞器和FSShapeComponents来拥有一个复杂形状的身体(用unity的碰撞器来定义形状);
3 遵循2但是使用常用形状(我们在这个部分会讲到);
现在,直接拖一个FSShapeComponent到这个物体上,确保他的类型是“多边形”而且“使用unity碰撞器”是被选中的(#4)。
#4
复制地面物体,改变它的缩放,重命名成“box”(或者别的除了原名)然后改变他的身体类型为“动态”。复制几个然后把它们放在你的场景中(#5)。
#5
你现在可以点击运行来检查是否一切运行正常。如果你的是专业版你可以把FSDebugComponent加到摄像机上。
现在,让我们在你的其中一个方块上试一下实现形状的另一个方法。从这个物体上删掉FSShapeComponent。创建一个新物体,把它作为你方块的子物体。重置坐标、旋转和缩放。(#6)
#6
给这个物体附上FSShapeComponent。取消“使用unity碰撞器”选项。我们要通过链接空物体当点的方式创建我们的形状。放置4个空物体(作为这个形状物体的子物体),给它们命名(P00,P01,P02,P03)(#7)。形状算法通过CCW(逆时针方向)创建形状。所以确保你的点的顺序是正确的。在这之后,把这些点对象(按顺序)拖到多边形点数组中(在父对象的FSShapeComponent中)(#8)。
#7
#8
通过这种定义形状的方法,一个简单的身体能有复杂的形状,每一个拥有独立的属性(摩擦力、反弹力和密度),而且它们不必是长方形和圆形,任何凸多边形都可以!
以上就是这个教程的第一部分。下一部分是关于链接。请自由查看在这个包中的两个场景。