私はUnityを使ってPlattformer-Gameに取り組んでいます。現在、 CatsInTheSkyの Farseer-Port を使用しています。
私はいくつかの問題を抱えています...ええ、物理学です。ゲームをリアルにしたいわけではありませんが、Farseer の CollisionDetection を使用したいと考えています。
それで、私は Farseer-Unity-Tutorials に従い、キャラクターにボックス (BodyType: Dynamic) を与えました。次のように動作します。
- 落下している
- 地面に衝突する
- そして滑りやすい
それから、Farseer と Box2D に関する調査を開始しました (さらに役立つチュートリアルがいくつかありました)。なぜなら、キャラクターを動かしたいだけで、キャラクターを動かすように言ったときに地面を滑らせたりしたくないからです。
そして、良い方法に関するいくつかの記事を読みました: Using Sensors for Collision Detection.
そこで、Unity でさらに 4 つのゲームオブジェクトを作成し、それらを Back/Front/Foot/Head-Sensor と呼び、それらに RevoluteJoint-Component を与え、PlayerObject をそれらの 4 つの 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 にアクセスする方法を知りたいです。)