ゲームオブジェクトを移動させる手段は色々ある。
けど、それぞれどれぐらい進むのか、かなりアバウトに考えてる。
そもそも違いもよくわかってない。
わかんねー事はやってみるのが早ぇ!!
ってことで
まず、Time.deltaTimeの設定。
Fixed Timestep = 0.02
TimeScale = 2
の、初期仕様。
数値はTransformの数値(グリッド)。
フレームを上限100に設定。(Editor上だとFPSが30ぐらいに設定される?ので一々ビルドして実験)
① transform.position.x += 0.02;//フレーム毎に0.02( * FPSで=TimeScale)進む
② transform.positon.x += Time.deltaTime;//1秒間にTimeScale分進む
③ rigidbody.velocity.x = Time.deltaTime * 50;
④ rigidbody.velocity.x = 1;
⑤ moveDirection.x = 0.02;//controller.Move(moveDirection);(Charactor Controller)を使用。
⑥ moveDirection.x = Time.deltaTime;//⑤と同じ
Charactor Controllerのは公式のスクリプトリファレンスを参考にしてる。
↓画像に数字つけるの忘れたorz
動かしてみた。
上から①②⑤⑥は = 2 で数値が一緒になる。
フレームは上限での固定なので、若干ムラが…?
③④のrigidbody.velocityは速度らしいけど、良く分からなかった。
③のTime.deltaTime*50は無理やり④の数値と一緒にするために50という数字を掛けてる。
とりあえず"1"にすると他のと同じぐらいになった。
FPSの上限を30に制限してみた。
Time.deltaTime = TimeScale / FPS
FPSが下がるとTime.deltaTimeの数は増える。
FPS100 ・・・ Time.deltaTime = 2/ 100 = 0.2 0.02(修正(笑))
FPS30 ・・・ Time.deltaTime = 2 / 30 = 0.0666666…
① 0.02 * FPS = 0.6/1s
② 0.066666 * FPS = 約2/1s
③ ?
④ ?
⑤ 0.02 * FPS = 0.6/1s
⑥ 0.066666 * FPS = 約2/1s
④rigidbody.velocity.x = 1は ②と⑥と一緒になった。
つまり1秒間に2進んでる。
③は速くなった。
Time.deltaTime(0.0666666) * 50 なので、3.333333…となる。
数値が増えると速くなる。
rigidbody,velocity.x = n の場合
n * TimeScale / 1s これだけ進むって事かな。
ってことは、rigidbody.velocityの場合、Time.deltaTimeは掛けなくて良。
とりあえず、どれを使っても1秒間に進む距離を同じにすることが出来る。
ただし、rigidbodyは色んな影響を受けるので誤差が出やすそう。



