テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityで少しだけ高速なシングルトン(Singleton)

GameObject.Find 系関数の処理速度の検証結果を受けて、シングルトンを見なおした。

この記事は、以下の記事の続き。
[Unity3D]もっと楽なシングルトンの実装
[Unity3D]シングルトンなオブジェクトを作る

試したのはオブジェクトをtagから検索する事で高速化を図る手法。この手法だと必ずGameControllerもしくはGameManagerタグの付いたオブジェクトにアタッチする必要がある。

結論としては、それなりの高速化が見込めそうだ(オブジェクトの数が増えても速度に影響しないのが特徴)。ただし、高速化する部分は「Awakeが呼ばれる前に呼び出したケース」のみで、Awakeが呼ばれた以降の場合は速度に差は殆ど無い。

スクリーンショット 2014-07-09 23.18.37

ソースコードこちら

使い方は今までどおり。以下のように記述する。また、ソースコードは特定のタグのオブジェクトに必ずアタッチする。

using UnityEngine;
using System.Collections;

public class TestCode : SingletonMonoBehaviourFast<TestCode> {
}

ついでに過去に作った汎用シングルトンも改良。こちらは特に指定無く普通にInstanceで持ってこれる。

なお、どちらも一度呼んだ後は参照コストはほぼ0(計測不能)になる。