質問: Unityで、シーン間でのスコア持ち越しについて質問します。 SingletonMonoBehaviorを継承したScoreManagerで、シーンをまたいだScoreの管理をしたいと思っていますが、 1.ScoreManagerの中にスコアを保持する変数と、DontDestroyOnLoadを実装する 2.他のスクリプト(そのシーンでの得点を保持しているスクリプト)からそれを呼び出す という実装は、具体的にどの様になるのでしょうか。 いろいろ調べてみたのですが、この例に当てはまるものがなくいま一つよくわかりません。 (SingletonMonoBehaviorはすでにあります) また、現在シーン内でDoTweenを使用しているのですが、 DoTweenで物体に移動をかけるとDoTweenによってDontDestroyOnLoadが生成されてしまいます。 DontDestoyOnLoadは、シーンをまたぐと増えていってしまい、どこかで削除しなければならないのですが、スコア持ち越しに使用しているDontDestroyOnLoadと、DoTweenで生成されるDontDestroyOnLoadを判別できる方法があればご教示ください。 ※DoTweenのDontDestroyOnLoadはシーンをまたいでも増えません。 スコアを保持するためのDontDestroyOnLoadは増えると思われるので、DoTweenのDontDestroyOnLoadを間違って削除しないようにしたいと考えています。 ・実装しているコードを書きたいのですが、概要がよくわからずコードの記述ができません。 コードが必要な場合は、ヒントを頂ければ実装してみてお返事させて下さい。
回答: もしかして質問者さんは現在この画像のような状態になっていることを質問文でおっしゃっているのでしょうか? !DontDestroyOnLoad もしそうであるならば前提の認識が間違っています。 この画像にある「DontDestoryOnLoad」はGameObjectではなく、 "[DOTween]ゲームオブジェクトがDontDestroyOnLoad状態になっている"ことを示す目印に過ぎません。 なのでDOTweenを使用していればこの状態になるのはおかしいことではありません。 その上で質問の回答なのですが、 1.についてはそのままです。ScoreManagerにDontDestroyOnLoadを記述して下さい。 (書き方は探せばたくさん出るので参照して下さい。と言っても一行書くだけですが) 2.はDontDestroyOnLoad状態にしたScoreManagerを他のスクリプト内で探して呼び出してください。 私は ``` GameObject ScoreManagerObject; ScoreManager scoreManager; ScoreManagerObject= GameObject.FindGameObjectWithTag("scoreManager"); scoreManager= ScoreManagerObject.GetComponent(); ``` のようにGameObject.FindGameObjectWithTagを使って、 他のスクリプト内でscoreManagerを呼び出せるようにしています。 「Unity 別のスクリプト」で調べればもっと詳細な情報が出ると思います。 DontDestroyOnLoad状態だと増える一方のスクリプトの消し方は SingletonMonoBehaviorが使えそうな気がしますが、何を参考にしてSingletonMonoBehaviorを書いたのかが提示されていないのでそこはすみませんが分からないです。