妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

カーリング的な物を作る(3) なぜTickのDeltaSecondsを使わないのか

妹「ちょっと質問があるんだけど、同じ結果が欲しいからTickの間隔に合わせないって言うけど、Tickの間隔でやっても結果って同じになるんじゃないの? 例えば1フレーム遅れたとしても、結局は次のフレームでそうなるだろうし」

「一番大きな理由は、フレームレートが変わるとストーンの曲がり方が変わるから」

f:id:una_unagi:20180301232953p:plain

「今の仕組みだと、計算の都度角度を変えながら直進するという仕組みだから、処理落ちでフレームレートが落ちると、曲がる回数も減って、カーブの軌道が微妙に変わってしまう。始点と終点が同じでも、途中のストーンと当たるかどうかが違ってくる。これはカーリング的に大問題」

妹「曲がるからかあ」

「あとは、ほぼ同時に2つの石にあたるみたいな時に、フレームレートによって、同時なのかほぼ同時なのか、変わってきたり。これもストーンが密集した場所だと、それぞれの飛び方が変わってややこしいことになる可能性がある」

妹「じゃあ逆にどういう場合だったらDeltaSecondsを使ってもいいんだろ」

シューティングゲームの弾とかだったら、判定の精密さより、見た目が安定してる方がいいかも。フレームレートによって速度が変わると弾避けれたりして、別の問題もでてくる。カーリングでもフレームレート低い方がスイープがしやすくなる可能性はあるんだけど……」

妹「ゴシゴシするやつね」

「最初に投げるとこはゴルフ的だけど、スイープはリアルタイムのアクション的にやりたい。ギリギリまでストーンを動かしたいから」

妹「どっちか片方を優先すると、もう片方があれなのかな」

「他にも方法はあって、見た目は見た目として、当たり判定を細かく計算するという方法でもいい。例えばFPS60のところが処理落ちで30しか出なかった場合、1フレームに2回ずつ動かして、当たり判定も2回やる。こうすると判定は完璧、見た目のスピードも変わらない」

妹「それがいいじゃん」

「でもそれをやるのは面倒くさいんだよ。UE4コリジョン判定も1フレームに2回以上の判定は想定してないから、自前で当たったかどうか計算しないとダメだろうし。カーリングは円だけで判定できるから簡単な方だけど、今回はそこまでスピーディーな物は求めてないのでやらなかった」