teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

汎用的に変更

2018/06/27 06:08

投稿

takezoux2
takezoux2

スコア6

answer CHANGED
@@ -1,15 +1,19 @@
1
- まず、SingletonMonoBehaviorは標準ライブラリに無いため、どのSingletonMonoBehavior実装であるかがわからないと正確なところがわかりません。後は[こちら](https://gist.github.com/tsubaki/e0406377a1b014754894)の実装と仮定していていきます。
1
+ まず、SingletonMonoBehaviorは標準ライブラリに無いため、どのSingletonMonoBehavior実装であるかがわからないと正確なところがわかりません。後は推測で書きます。
2
2
 
3
- 1. テラシュールさんのSingletonMonoBehaviorを使用しているならば、AwakeValidlyをoverrideして、その中でDontDestoryOnLoad()を呼び出せばOKです。起きている現象は、変な場所でDontDestoryOnLoadを呼び出しているからかと思います。実装を見直してください。(DoTweenが勝手にDontDestoryOnLoadを呼び出してはいないです)
4
- 2. テラシュール(略、ScoreManager.InstanceでScoreManagerのインスタンスがどこでも取得出来ます。DontDestoryOnLoadが変なところで呼び出される実装を修正すれば普通にあとはScoreManagerのフィールドまたはプロパティとして保持すれば良いかと思います。
3
+ 1. 普通ならAwakeをoverrideして、その中でDontDestoryOnLoad()を呼び出せばOKです。起きている現象は、変な場所でDontDestoryOnLoadを呼び出しているからかと思います。実装を見直してください。(DoTweenが勝手にDontDestoryOnLoadを呼び出してはいないです)
4
+ 2. 普通の実装なら、static ScoreManager Instanceなどが定義れている、ScoreManager.InstanceでScoreManagerのインスタンスがどこでも取得出来ます。DontDestoryOnLoadが変なところで呼び出される実装を修正すれば普通にあとはScoreManagerのフィールドまたはプロパティとして保持すれば良いかと思います。
5
5
 
6
6
 
7
7
  ```csharp
8
8
  public class ScoreManager : SingletonMonoBehaviour<ScoreManager>
9
9
  public int Score{get;set;}
10
+ //継承元のAwake実装がvirtualになっていない場合、virtualに変更する必要があります。
10
- protected override void AwakeValidly()
11
+ protected override void Awake()
11
12
  {
13
+ base.Awake();
14
+ if(Instance == this) {
12
- DontDestoryOnLoad();
15
+ DontDestoryOnLoad(this.gameObject);
16
+ }
13
17
  }
14
18
  }
15
19
 

1

実装元を勘違いしていたので修正

2018/06/27 06:08

投稿

takezoux2
takezoux2

スコア6

answer CHANGED
@@ -1,7 +1,7 @@
1
- まず、SingletonMonoBehaviorは標準ライブラリに無いため、どのSingletonMonoBehavior実装であるかがわからないと正確なところがわかりません。後はUniRXと仮定して書いていきます。
1
+ まず、SingletonMonoBehaviorは標準ライブラリに無いため、どのSingletonMonoBehavior実装であるかがわからないと正確なところがわかりません。後は[こちら](https://gist.github.com/tsubaki/e0406377a1b014754894)の実装と仮定して書いていきます。
2
2
 
3
- 1. UniRXのSingletonMonoBehaviorを使用しているならば、AwakeValidlyをoverrideして、その中でDontDestoryOnLoad()を呼び出せばOKです。起きている現象は、変な場所でDontDestoryOnLoadを呼び出しているからかと思います。実装を見直してください。(DoTweenが勝手にDontDestoryOnLoadを呼び出してはいないです)
4
- 2. UniRXの(略、ScoreManager.InstanceでScoreManagerのインスタンスがどこでも取得出来ます。DontDestoryOnLoadが変なところで呼び出される実装を修正すれば普通にあとはScoreManagerのフィールドまたはプロパティとして保持すれば良いかと思います。
3
+ 1. テラシュールさんのSingletonMonoBehaviorを使用しているならば、AwakeValidlyをoverrideして、その中でDontDestoryOnLoad()を呼び出せばOKです。起きている現象は、変な場所でDontDestoryOnLoadを呼び出しているからかと思います。実装を見直してください。(DoTweenが勝手にDontDestoryOnLoadを呼び出してはいないです)
4
+ 2. テラシュールさんの(略、ScoreManager.InstanceでScoreManagerのインスタンスがどこでも取得出来ます。DontDestoryOnLoadが変なところで呼び出される実装を修正すれば普通にあとはScoreManagerのフィールドまたはプロパティとして保持すれば良いかと思います。
5
5
 
6
6
 
7
7
  ```csharp