//--------------------------------------------------------- /// <summary> /// インスタンス生成(スクリプトから生成する場合) /// </summary> /// <returns></returns> public static MultiplayerManager Create(Transform tParent = null, MultiplayerControllerInterface tController = null) { if (m_Instance != null) { return(m_Instance); } // オブジェクトが非アクティブだと検出されないのでオブジェクトを非アクティブにしてはならない // この判定は必須で mInstance は static であるためシーンの最初はオブジェクトが存在しても null になっている m_Instance = GameObject.FindObjectOfType <MultiplayerManager>(); if (m_Instance == null) { GameObject tGameObject = new GameObject("MultiplayerManager"); if (tParent != null) { tGameObject.transform.SetParent(tParent, false); } tGameObject.AddComponent <MultiplayerManager>(); } // コントローラーが null の場合はデフォルトの NetworkView を使う m_Instance.m_Controller = tController; return(m_Instance); }
/// <summary> /// インスタンスを破棄する /// </summary> public static void Delete() { if (m_Instance != null) { if (Application.isPlaying == false) { DestroyImmediate(m_Instance.gameObject); } else { Destroy(m_Instance.gameObject); } m_Instance = null; } }
//----------------------------------------------------------------- void Awake() { // 既に存在し重複になる場合は自身を削除する if (m_Instance != null) { GameObject.DestroyImmediate(gameObject); return; } MultiplayerManager tInstanceOther = GameObject.FindObjectOfType <MultiplayerManager>(); if (tInstanceOther != null) { if (tInstanceOther != this) { GameObject.DestroyImmediate(gameObject); return; } } //----------------------------- // Awake 内でマニュアルで実行した場合とスクリプトで実行した場合の共通の処理を行う必要がある m_Instance = this; // シーン切り替え時に破棄されないようにする(ただし自身がルートである場合のみ有効) if (transform.parent == null) { DontDestroyOnLoad(gameObject); } //----------------------------- // 原点じゃないと気持ち悪い gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localRotation = Quaternion.identity; gameObject.transform.localScale = Vector3.one; //----------------------------- // 各種初期化処理を行う // Initialize() ; }