Skip to content
第01回 3Dダイスポーカー

2 / 4 サイコロの停止を判定する

このステップの目的

速度と角速度を使い、物理シミュレーションが結果判定へ進める状態になったことを判定する

停止判定を作る

位置がほとんど変わらないことと、回転がほとんど変わらないことを確認します。

csharp
bool IsStopped(float linearLimit, float angularLimit)
{
    return body.linearVelocity.sqrMagnitude < linearLimit * linearLimit
        && body.angularVelocity.sqrMagnitude < angularLimit * angularLimit;
}

しきい値を小さくしすぎると判定が遅くなり、大きくしすぎると転がっている途中で判定します。

全個体の停止を待つ

5個すべてが停止した後にだけ、出目判定へ進めます。停止した個体の数を毎フレーム数える方法から始めます。

チェックリスト
  • 速度と角速度の両方を使っている
  • 5個すべての停止を待っている
  • しきい値を変えたとき判定タイミングが変わる