1

我正在使用 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。)

4

0 回答 0