前提・実現したいこと
シングルトンにもいろいろな書き方があると思いますが、
簡単な書き方でクラスで取得したくて(もちろん、破棄したい場合はゲームオブジェクトごと)、
こちらのサイトを参考に、下記コードを作成しました。
しかし、2つ疑問点があります。
・参考サイトだと「Destroy (this);」で、スクリプトを破棄していると思うのですが、
これは間違っていませんか?
実際、検証してみたら、そのシーンに戻ってきた際、
ゲームオブジェクトは破棄されずにスクリプトだけ取り外された新しいゲームオブジェクトが生成されてしまっていました。
それとも、これは何か意図があるのでしょうか?
・参考サイトの書き方に倣って、あえて「DontDestroyOnLoad(this);」と書いてみたら、
シーン遷移した際、スクリプトだけでなく、ゲームオブジェクトも破棄さずれに引き継がれました。
このような挙動になるのは何故でしょうか?
DontDestroyOnLoad(this);だとスクリプトだけ破棄されない状態を保つように思えるのですが、
ゲームオブジェクトは破棄されて、それにアタッチしているスクリプトだけ生き残る状態なんてありえないから、
結果的にゲームオブジェクトごと破棄されない状態になるということでしょうか?
この書き方はなんだか、すっきりしないので、
DontDestroyOnLoad(this.gameObject);
と書いたほうが明解でよい気がするのですが、いかがでしょうか?
自己解釈としては、
DestroyもDontDestroyOnLoadも、
C#
1 Destroy(this.gameObject); 2 DontDestroyOnLoad(this.gameObject);
と書くべきだと思っているのですか、いかがでしょうか?
ご教示お願いします。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour { 6 7 private static Player mInstance; 8 9 public static Player Instance { 10 get { 11 return mInstance; 12 } 13 } 14 15 void Awake () { 16 if (mInstance == null) { 17 mInstance = this; 18 DontDestroyOnLoad(this); 19 } else { 20 Destroy (this); 21 } 22 } 23 24}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/24 06:23 編集
2018/05/24 16:31
退会済みユーザー
2018/05/24 23:32
2018/05/25 01:50