カーリング的な物を作る(3) なぜTickのDeltaSecondsを使わないのか
妹「ちょっと質問があるんだけど、同じ結果が欲しいからTickの間隔に合わせないって言うけど、Tickの間隔でやっても結果って同じになるんじゃないの? 例えば1フレーム遅れたとしても、結局は次のフレームでそうなるだろうし」
「一番大きな理由は、フレームレートが変わるとストーンの曲がり方が変わるから」
「今の仕組みだと、計算の都度角度を変えながら直進するという仕組みだから、処理落ちでフレームレートが落ちると、曲がる回数も減って、カーブの軌道が微妙に変わってしまう。始点と終点が同じでも、途中のストーンと当たるかどうかが違ってくる。これはカーリング的に大問題」
妹「曲がるからかあ」
「あとは、ほぼ同時に2つの石にあたるみたいな時に、フレームレートによって、同時なのかほぼ同時なのか、変わってきたり。これもストーンが密集した場所だと、それぞれの飛び方が変わってややこしいことになる可能性がある」
妹「じゃあ逆にどういう場合だったらDeltaSecondsを使ってもいいんだろ」
「シューティングゲームの弾とかだったら、判定の精密さより、見た目が安定してる方がいいかも。フレームレートによって速度が変わると弾避けれたりして、別の問題もでてくる。カーリングでもフレームレート低い方がスイープがしやすくなる可能性はあるんだけど……」
妹「ゴシゴシするやつね」
「最初に投げるとこはゴルフ的だけど、スイープはリアルタイムのアクション的にやりたい。ギリギリまでストーンを動かしたいから」
妹「どっちか片方を優先すると、もう片方があれなのかな」
「他にも方法はあって、見た目は見た目として、当たり判定を細かく計算するという方法でもいい。例えばFPS60のところが処理落ちで30しか出なかった場合、1フレームに2回ずつ動かして、当たり判定も2回やる。こうすると判定は完璧、見た目のスピードも変わらない」
妹「それがいいじゃん」
「でもそれをやるのは面倒くさいんだよ。UE4のコリジョン判定も1フレームに2回以上の判定は想定してないから、自前で当たったかどうか計算しないとダメだろうし。カーリングは円だけで判定できるから簡単な方だけど、今回はそこまでスピーディーな物は求めてないのでやらなかった」