回答編集履歴

2

修正

2020/07/13 13:35

投稿

IShix
IShix

スコア1729

test CHANGED
@@ -28,7 +28,9 @@
28
28
 
29
29
 
30
30
 
31
+ `ScriptableObject`の`Awake`のみランタイムは関係ありません。
32
+
31
- `ScriptableObject`の`Awake`のみランタイムは関係ありません。生成後Project上に残り続けるデータだからです。メソッド名が同じなので混乱しますね。違う名前にして欲しかったです。
33
+ 生成後Project上に残り続けるデータだからです。メソッド名が同じなので混乱しますね。違う名前にして欲しかったです。
32
34
 
33
35
 
34
36
 
@@ -82,11 +84,11 @@
82
84
 
83
85
 
84
86
 
85
- ### (おまけ)イベントの実行順
87
+ ### イベントの実行順
86
88
 
87
89
 
88
90
 
89
- ヒエラルキーに設置したオブジェクト(`MonoBehaviour`)とアタッチしている`ScriptableObject`とういう条件比較です。
91
+ ヒエラルキーに設置したオブジェクト(`MonoBehaviour`)とアタッチしている`ScriptableObject`と想定すると下記実行順となります。
90
92
 
91
93
 
92
94
 
@@ -97,3 +99,17 @@
97
99
  3. MonoBehaviour.OnEnable()
98
100
 
99
101
  4. MonoBehaviour.Start()
102
+
103
+
104
+
105
+ ### 今回詳しく解説した理由
106
+
107
+ 今回の`power`は取得タイミングによって値が変わります。
108
+
109
+ `OnEnable`が走る前は0を返し、`OnEnable`が走った後は計算された値を返します。
110
+
111
+ こういうのをプログラム用語で「副作用がある」と言います。
112
+
113
+ 今回の説明で`OnEnable`で`power`に代入すれば**常に計算された値を取得できる**事が保証されているのが分かると思います。
114
+
115
+ 特に今回のような戻り値のあるもので副作用がある場合、バグになりやすいので徹底的に問題無いか調査するのをおすすめします。

1

修正

2020/07/13 13:35

投稿

IShix
IShix

スコア1729

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- `ScriptableObject`の`Awake`のみランタイムは関係ありません。生成後、Project上に残り続けるデータなので生成た時のみ`Awake`が走ります。
31
+ `ScriptableObject`の`Awake`のみランタイムは関係ありません。生成後、Project上に残り続けるデータだからです。メソッド名が同じなので混乱します違う名前にして欲しかったです。
32
32
 
33
33
 
34
34
 
@@ -86,7 +86,7 @@
86
86
 
87
87
 
88
88
 
89
- ヒエラルキーに設置したオブジェクトとアタッチしている`ScriptableObject`とういう条件の比較です。
89
+ ヒエラルキーに設置したオブジェクト(`MonoBehaviour`)とアタッチしている`ScriptableObject`とういう条件の比較です。
90
90
 
91
91
 
92
92