こんにちは、SAT-BOXのコアラです。
突然ですが、Unityでスクリプト(C#)を作成して開いてみましょう。
大体こんな感じになってると思います。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Sample : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
テンプレートを変えたりしてなければ、こんな感じにStart関数とUpdate関数があると思います。
ここで本題です
もしUpdate関数を使わなかった場合、消しますか?残しますか?
処理速度的には消したほうがよさそうな気がしますね、でもなんとなく残すこと、ありますよね。
消したときと残したとき、どれだけ処理速度に差が出るかUnityのProfilerで検証してみました。
方法は下の画像の通り、同一のスクリプトを10個付けたGameObjectのみシーン上に100個、つまりUpdate1,000回分用意しました。
Sampleスクリプトに書かれたUpdate関数がある場合ない場合の差をProfilerで見てみましょう!
ない場合
ある場合
このようになりました。
グラフに惑わされそうですが、処理時間1ms以下での話なのでグラフはあまり意味がなかったかもしれません。なんで撮ったし
Updateの処理時間としては、ある場合の画像のここ
BehaviourUpdateのTime msが処理時間ですね。
Update関数がない場合は当然ここは0なので、ある場合のここの数値がそのまま処理時間の差になります。それとPC性能によっても個人差個体差がありますね。
画像では0.55msですが、フレーム全体でみると0.55~0.60msの間で安定していました。
さて、この結果を踏まえてUpdate関数はなるべく消したほうがいいのか・・・
それは人の好みです!
検証ではUpdateを1,000回分用意しましたが、中に何も書いてないUpdate関数がシーン内にどれだけあるか、現実的な数字としてはもっと少なそうですよね。
そうなってくると消すか残すかは好みかなぁ・・・って思いましたね!僕は消してます
ということで、結論「僕は消してます」