SoundManagerやDataManager等でよく使われるシングルトン。
以前の記事でも紹介させて頂きました。
【Unity】どこでもデータ共有できるオブジェクトをつくろう
こちらを少し見直し、ちょっぴり軽くする方法を公開したいと思います。
■以前(よく見かける方法)
public class DataManager : MonoBehaviour { private static DataManager instance; public static DataManager Instance{ get{ if( null == instance ){ instance = (DataManager)FindObjectOfType(typeof(DataManager)); if( null == instance ){ Debug.Log(" DataManager Instance Error "); } } return instance; } } void Awake(){ GameObject[] obj = GameObject.FindGameObjectsWithTag("DataManager"); if( 1 < obj.Length ){ // 既に存在しているなら削除 Destroy( gameObject ); }else{ // シーン遷移では破棄させない DontDestroyOnLoad( gameObject ); } } }
■改良版
public class DataManager : MonoBehaviour { public static DataManager Instance; void Awake(){ if( null != Instance ){ // 既に存在しているなら削除 Destroy( gameObject ); }else{ // 存在していないなら指定する Instance = this; } // シーン遷移では破棄させない DontDestroyOnLoad( gameObject ); } }
ちょっぴり軽くなったポイント
- getでのnullチェックを無くした事により、もしUpdate文などで呼んでも毎フレームnullチェックをしなくなる
- Find関数を使わない
ちょっぴりの高速化とはいえ、
モバイル環境での開発ではパフォーマンスは出せるだけ出したいところだと思いますので、
是非活用してみてください!
コメント