名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

【Unity】Update関数を消すべきか残すべきか

こんにちは、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回分用意しました。
f:id:sat-box:20180122160002p:plain


Sampleスクリプトに書かれたUpdate関数がある場合ない場合の差をProfilerで見てみましょう!

ない場合
f:id:sat-box:20180122160008p:plain

ある場合
f:id:sat-box:20180122160011p:plain

このようになりました。

グラフに惑わされそうですが、処理時間1ms以下での話なのでグラフはあまり意味がなかったかもしれません。なんで撮ったし

Updateの処理時間としては、ある場合の画像のここ
f:id:sat-box:20180122173626p:plain

BehaviourUpdateのTime msが処理時間ですね。
Update関数がない場合は当然ここは0なので、ある場合のここの数値がそのまま処理時間の差になります。それとPC性能によっても個人差個体差がありますね。

画像では0.55msですが、フレーム全体でみると0.55~0.60msの間で安定していました。


さて、この結果を踏まえてUpdate関数はなるべく消したほうがいいのか・・・

それは人の好みです!


検証ではUpdateを1,000回分用意しましたが、中に何も書いてないUpdate関数がシーン内にどれだけあるか、現実的な数字としてはもっと少なそうですよね。
そうなってくると消すか残すかは好みかなぁ・・・って思いましたね!僕は消してます

ということで、結論「僕は消してます」