我正在使用 Unity 开发 Plattformer 游戏。我目前正在使用CatsInTheSky的 Farseer-Port :
我遇到了一些问题......是的,物理。我真的不想让游戏中的东西变得逼真,但我想使用 Farseer 的 CollisionDetection。
所以,我遵循了 Farseer-Unity-Tutorials 并给了我的角色一个盒子(BodyType:动态)。它的行为应如此:
- 跌倒
- 与地面相撞
- 而且有点滑
然后我开始对 Farseer 和 Box2D 进行一些研究(有一些更有用的教程),因为我只想让我的角色移动,当我说他移动时,不要在地面上滑动或类似的东西。
我读了一些关于好方法的文章:Using Sensors for Collision Detection。
所以我在 Unity 中又制作了四个 GameObjects 并将它们称为 Back/Front/Foot/Head-Sensor,给它们一个 RevoluteJoint-Component 并将 PlayerObject 与这四个 GameObjects 绑定(它也有一个 Body-Component 并且标记为“Dynamic” -Bodies),我给了他们一个脚本,其中包含这样的 CodeLine:
FootSensor.IsSensor = true;
所以它们根本不会发生碰撞(因为它们被标记为动态物体),但会发生碰撞。
现在我有点卡住了:/
我无法弄清楚如果我的 Player-Body 触地时如何准确地告诉他静止不动。
我尝试过这样的事情,但它根本不起作用:
bool SensorOnCollision (Fixture fixtureA, Fixture fixtureB, Contact contact)
{
Debug.Log("HIT THE GROUND!");
velocity.Y = 0;
return true;
}
(“速度”变量是一个全局变量,我在其中放置了我的播放器的 Body.LinearVelocity-Information)
然后我将我的 Player-Body 更改为 Kinematic-Body 知道它根本不会浮动或碰撞,直到我想要这样。所以重力也完全不会影响它。
我只想让我的传感器告诉我,如果我被接地,如果是,我应该留在这个地面上。
如果有人可以提供帮助,真的会很感激吗?
(如果其他人正在使用该 Unity-Port,我很想知道如何访问 Farseer ContactListener。)