1

私はある種のプールゲームに取り組んでいます。テーブルを作成するために、私は側面として立方体を使用しました。内蔵の物理エンジンを使用して、これらの側面をボールと相互作用させたいと思います。悲しいことに、私はそれを機能させることができません。

これが私がしたことです。側面として立方体を作成し、ボール用の球を作成しました。球を移動するために、rigidbody.MovePosition関数を使用しています。立方体と球の両方に衝突型加速器と剛体が取り付けられており、重力がオフになっています。

球体の動きは問題ありませんが、立方体と衝突すると立方体が飛んでいきます。立方体は動かない壁であるはずなので、すべての軸の回転と動きを制限しました。ただし、制約を使用すると、物理エンジンがおかしくなります。球が停止したり反対方向に移動したりする代わりに、球は単に立方体を通過します。明らかに、何かがおかしいので、同じことを理解するのに助けが必要です。

前もって感謝します。

球を移動するために使用されるコードは次のとおりです。

public float movePower = 10.0f;

// Update is called once per frame
void Update () 
{
    if(Input.GetKey(KeyCode.LeftArrow))
    {
        rigidbody.MovePosition(transform.position + Vector3.left* movePower * Time.deltaTime);
    }
    if(Input.GetKey(KeyCode.RightArrow))
    {
        rigidbody.MovePosition(transform.position + Vector3.right* movePower * Time.deltaTime);
    }
    if(Input.GetKey(KeyCode.DownArrow))
    {
        rigidbody.MovePosition(transform.position + Vector3.down* movePower * Time.deltaTime);
    }
    if(Input.GetKey(KeyCode.UpArrow))
    {
        rigidbody.MovePosition(transform.position + Vector3.up* movePower * Time.deltaTime);
    }

}
4

1 に答える 1

1

最も簡単な方法は、Rigidbody固定されているはずのすべてのキューブから を削除することです。もう 1 つの方法は、立方体のRigidbodyコンポーネントを としてマークするKinematicことですが、これは、物理に参加する必要があるがエンジンによって動かされてはならないプレイヤー キャラクターなどの移動オブジェクトに使用されることを意味します。

Unity Physicsの man ページを読むことをお勧めします。


アップデート:

その他の考慮事項:

  • チェックしないIs Trigger
  • 正しく設定されていることを確認してくださいLayer Collision Matrix(メニュー編集/プロジェクト設定/物理)
  • 速度が非常に速い場合、物理エンジンが混乱し、衝突が検出されない可能性があります
  • モデルが極端に縮小または拡大されていないことを確認します (スケール = 1 が最適です)。
  • の最適な質量Rigidbody.massは 1 です
  • またはPhysicsManagerのような設定で遊ぶときは注意してくださいMin Penetration For PenaltySolver Iteration Count
  • 可能であれば重力を使用する
  • Transform直接操作して動かさないでください。Rigidbody代わりにメソッドを使用する
  • rigidbody.MovePosition一定の直線運動である場合は、更新ごとに呼び出すことは避けてください。1回やったらそのまま放置
  • rigidbody.MovePosition呼び出しなどには FixedUpdate を使用することを忘れないでください。
于 2013-02-19T16:11:39.037 に答える