一分間スクラッチ講座アイキャッチ画像
一分間スクラッチ講座 1フレーム当たりの時間を計測する方法

このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。

スクラッチの繰返し処理「ずっと繰り返す」「〇回繰り返す」「~まで繰り返す」の繰返し処理の中では、ブロック内で指定された処理が繰り返されます。繰返し処理内の1つ1つの処理は「フレーム」という単位であらわされます。

速いパソコンの場合、1フレームは0.03秒程度、つまり1秒間に30回から35回程度の処理が行われます。
Unityではデバイス間の処理速度を変更する方法がいくつかありますが、スクラッチには内容です。
1分間 Unity講座 デバイス間の処理速度を統一する3つの方法

今回は使用しているパソコンで、1フレームにどの程度の時間がかかるのか計測する方法をご紹介します。

下の動画は不定期配信の「ファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。

1、変数とリストの用意

事前にサンプルの作品をご紹介します。

まずは、リストを1つ用意します。

  • デルタタイム – フレームごとの時間を格納するリスト

※ デルタは2 つの値や状態の差分を表す用語でよく使用されます。プログラミングでは毎フレームの時間を「DeltaTime」などと使用するケースが多いようです。

さらに変数を3つ用意します。

  • 合計 – リスト「デルタタイム」の全ての値の合計を管理する変数
  • 平均 – リスト「デルタタイム」の平均値(合計 / デルタタイムの長さ)
  • 1秒間の処理回数 – 1秒間に繰り返されるフレーム数(1 / 平均)
変数とリストを用意

スプライトの動き

スクラッチではスプライトの描写処理がない場合、繰返し処理は一瞬で多くの処理を行ってしまいます。リストの「画面を再描画せずに実行」の処理になります。

そこで事前にスプライトに何らかの動きを施しておきます。

サンプルでは、「ずっとブロック」の内部処理で「次のコスチュームにする」の処理を作成しています。

スプライトに負荷をかける処理

時間の計測と集計

フレームごとの時間をリストに格納するには「タイマー」を活用します。

  • 変数:合計を0でリセット
  • リスト:デルタタイムの値をすべて削除して、リストを空っぽにする
  • 以下の処理を繰り返し実行(サンプルでは100回、数が多いほど正確な値に近づきます)
    • タイマーの値をリスト:デルタタイムに追加
    • タイマーの値を変数:合計に加算
    • タイマーをリセット(0に戻す)
Frameごとの時間をリストに格納するスクリプト

下の図のように、リストには100個の時間が格納されます。サンプルでは0.032~0.035秒の間の数字が多いようです。

合計には、100回の処理の合計値が格納されます。

結果をリストに格納する動き

続いて「スペースキー」が押されたときに2つの変数値を計算する処理を行います。

  • 変数:平均 を 変数:合計 / 100 にする
  • 変数:1秒間の処理回数 を 1/変数:平均 にする
フレームの集計をするスクリプト

平均は合計の値を処理回数で割った値になります。今回は100回の処理を行っているので、合計/100になります。

1秒間の処理回数は 1秒 を平均のフレーム時間で割れば算出することができます。

サンプルでは、1フレームの平均時間が 0.03302秒、1秒間の処理回数は 30.284576回になります。これはパソコンによっても違いますし、同じパソコンでもその都度、動作環境によっても変わってきます。

毎フレームの集計値

皆さんのパソコンは、これよりも速い結果、出ましたか?

サンプルはこちらで共有しています。ttps://scratch.mit.edu/projects/1084239761


ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

TOP