回答編集履歴

15

修正

2021/07/26 18:25

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -46,9 +46,13 @@
46
46
 
47
47
 
48
48
 
49
+ 退会済みユーザーさんが指摘していた様にrefを使ったint型での参照渡しはここから作り変えるのは難しいかと思います。
50
+
51
+
52
+
49
- int型では難しいかと思うので参照型を使って作り変えて下さい。
53
+ 参照渡しでは無く参照型を使って作り変えて下さい。
50
-
54
+
51
- int[]にするだけで良いです。
55
+ int[]にするだけで良いです。
52
56
 
53
57
 
54
58
 

14

修正

2021/07/26 18:25

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- 上記の値が変化しないという話かと思いますが`List<Data> myData`を宣言時の`numbers = GManager.instance.kazeint`は値渡しなので`myData`内の`numbers`を増やしても親元の値は変化はしません。
17
+ 上記の値が変化しないという話かと思いますが`List<Data> myData`を宣言時の`numbers = GManager.instance.kazeint`以下は値渡しなので`myData`内の`numbers`を増やしても親元の値は変化はしません。
18
18
 
19
19
 
20
20
 

13

修正

2021/07/26 14:18

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  int型では難しいかと思うので参照型を使って作り変えて下さい。
50
50
 
51
- 正直int[]にするだけで良いです。
51
+ int[]にするだけで良いです。
52
52
 
53
53
 
54
54
 

12

修正

2021/07/26 14:15

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- int型では難しいので手間ですが参照型を使って作り変えて下さいという話です
49
+ int型では難しいかと思うので参照型を使って作り変えて下さい。
50
50
 
51
51
  正直int[]にするだけで良いです。
52
52
 

11

修正

2021/07/26 14:14

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- 意味的には別質問で退会済みユーザーさんが指摘していた「GManager.Instance.変数名 = 数値;」と同じです。
41
+ 意味的には https://teratail.com/questions/317983 で退会済みユーザーさんが指摘していた「GManager.Instance.変数名 = 数値;」と同じです。
42
42
 
43
43
 
44
44
 

10

修正

2021/07/26 14:14

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- **・別質問でZuishinさんの様に理解出来ない方がいたようなので追記**
35
+ **・別質問で理解出来ない方がいたようなので追記**
36
36
 
37
37
  > `GManager.instance.kazeint++`の様に直接加算させる
38
38
 
@@ -297,9 +297,3 @@
297
297
 
298
298
 
299
299
  別質問ではDictinaryに変更して解決されたようで良かったです。
300
-
301
-
302
-
303
- 初心者の方は仕方ないのですが、
304
-
305
- まさかZuishinさんがここまでコード読解力無いとは思いませんでした。

9

追記

2021/07/26 13:59

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -48,8 +48,258 @@
48
48
 
49
49
  int型では難しいので手間ですが参照型を使って作り変えて下さいという話です。
50
50
 
51
+ 正直int[]にするだけで良いです。
52
+
53
+
54
+
55
+ スパゲティなのでintのインクリメント部分だけ抜き出して書くと下記になります。
56
+
57
+
58
+
59
+ ```C#
60
+
61
+ using System.Collections.Generic;
62
+
63
+ using UnityEngine;
64
+
65
+
66
+
67
+ class Data
68
+
69
+ {
70
+
71
+ public int numbers;
72
+
73
+ }
74
+
75
+
76
+
77
+ public class gacha : MonoBehaviour
78
+
79
+ {
80
+
81
+ public GManager g;
82
+
83
+
84
+
85
+ public void itiren()
86
+
87
+ {
88
+
89
+ List<Data> myData = new List<Data>
90
+
91
+ {
92
+
93
+ new Data
94
+
95
+ {
96
+
97
+ numbers = GManager.instance.kazeint
98
+
99
+ },
100
+
101
+ };
102
+
103
+
104
+
105
+ myData[ 0 ].numbers++;
106
+
107
+
108
+
109
+ Debug.Log( "gachaクラスのmyData[ 0 ].numbers: " + myData[ 0 ].numbers );
110
+
111
+ Debug.Log( "GManagerクラスのg.kazeint: " + g.kazeint );
112
+
113
+ }
114
+
115
+ }
116
+
117
+
118
+
119
+ public class GManager : MonoBehaviour
120
+
121
+ {
122
+
123
+ public static GManager instance = null;
124
+
125
+
126
+
127
+ public int kazeint;
128
+
129
+
130
+
131
+ private void Awake()
132
+
133
+ {
134
+
135
+ kazeint = 0;
136
+
137
+
138
+
139
+ if( instance == null )
140
+
141
+ {
142
+
143
+ instance = this;
144
+
145
+ DontDestroyOnLoad( this.gameObject );
146
+
147
+ }
148
+
149
+ else
150
+
151
+ {
152
+
153
+ Destroy( this.gameObject );
154
+
155
+ }
156
+
157
+ }
158
+
159
+ }
160
+
161
+ ```
162
+
163
+
164
+
165
+ コレが質問で問題となっている値渡しの弊害でmyData[ 0 ].numbersをインクリメントしてもログは下記のようになりGManagerクラスのg.kazeintは0のままです。
166
+
167
+ ```
168
+
169
+ gachaクラスのmyData[ 0 ].numbers: 1
170
+
171
+ GManagerクラスのg.kazeint: 0
172
+
173
+ ```
174
+
175
+ -------------------------------------------------------------------------
176
+
177
+ 次に両方のクラスのintをint[]配列に変えてやると
178
+
179
+
180
+
181
+ ```C#
182
+
183
+ using System.Collections.Generic;
184
+
185
+ using UnityEngine;
186
+
187
+
188
+
189
+ class Data
190
+
191
+ {
192
+
193
+ public int[] numbers;
194
+
195
+ }
196
+
197
+
198
+
199
+ public class gacha : MonoBehaviour
200
+
201
+ {
202
+
203
+ public GManager g;
204
+
205
+
206
+
207
+ public void itiren()
208
+
209
+ {
210
+
211
+ List<Data> myData = new List<Data>
212
+
213
+ {
214
+
215
+ new Data
216
+
217
+ {
218
+
219
+ numbers = GManager.instance.kazeint
220
+
221
+ },
222
+
223
+ };
224
+
225
+
226
+
227
+ myData[ 0 ].numbers[ 0 ]++;
228
+
229
+
230
+
231
+ Debug.Log( "gachaクラスのmyData[ 0 ].numbers[ 0 ]: " + myData[ 0 ].numbers[ 0 ] );
232
+
233
+ Debug.Log( "GManagerクラスのg.kazeint[ 0 ]: " + g.kazeint[ 0 ] );
234
+
235
+ }
236
+
237
+ }
238
+
239
+
240
+
241
+ public class GManager : MonoBehaviour
242
+
243
+ {
244
+
245
+ public static GManager instance = null;
246
+
247
+
248
+
249
+ public int[] kazeint;
250
+
251
+
252
+
253
+ private void Awake()
254
+
255
+ {
256
+
257
+ kazeint = new int[] { 0 };
258
+
259
+
260
+
261
+ if( instance == null )
262
+
263
+ {
264
+
265
+ instance = this;
266
+
267
+ DontDestroyOnLoad( this.gameObject );
268
+
269
+ }
270
+
271
+ else
272
+
273
+ {
274
+
275
+ Destroy( this.gameObject );
276
+
277
+ }
278
+
279
+ }
280
+
281
+ }
282
+
283
+ ```
284
+
285
+
286
+
287
+ ログは下記のようになり渡し元のGManagerクラスの数値も増加させる事が可能になります。
288
+
289
+ ```
290
+
291
+ gachaクラスのmyData[ 0 ].numbers[ 0 ]: 1
292
+
293
+ GManagerクラスのg.kazeint[ 0 ]: 1
294
+
295
+ ```
296
+
297
+
298
+
51
299
  別質問ではDictinaryに変更して解決されたようで良かったです。
52
300
 
53
301
 
54
302
 
303
+ 初心者の方は仕方ないのですが、
304
+
55
305
  まさかZuishinさんがここまでコード読解力無いとは思いませんでした。

8

修正

2021/07/26 13:22

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -46,4 +46,10 @@
46
46
 
47
47
 
48
48
 
49
- int型では難しいので大元から作り変える事になり手間ですが参照型を使って作り変えて下さいという話です。別質問ではDictinaryに変更して解決されたようで良かったです。
49
+ int型では難しいので手間ですが参照型を使って作り変えて下さいという話です。
50
+
51
+ 別質問ではDictinaryに変更して解決されたようで良かったです。
52
+
53
+
54
+
55
+ まさかZuishinさんがここまでコード読解力無いとは思いませんでした。

7

修正

2021/07/26 13:05

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- 意味的には別質問で退会済みユーザーさんが「GManager.Instance.変数名 = 数値;」にすればいう指摘と同じです。
41
+ 意味的には別質問で退会済みユーザーさんが指摘していた「GManager.Instance.変数名 = 数値;」と同じです。
42
42
 
43
43
 
44
44
 

6

追記

2021/07/26 12:16

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -46,4 +46,4 @@
46
46
 
47
47
 
48
48
 
49
- 大元から作り変える事になり手間ですが参照型を使って作り変えて下さいという話です。別質問ではDictinaryに変更して解決されたようで良かったです。
49
+ int型では難しいので大元から作り変える事になり手間ですが参照型を使って作り変えて下さいという話です。別質問ではDictinaryに変更して解決されたようで良かったです。

5

修正

2021/07/26 12:15

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- 別質問で退会済みユーザーさんが「GManager.Instance.変数名 = 数値;」にすればという指摘と同じです。
41
+ 意味的には別質問で退会済みユーザーさんが「GManager.Instance.変数名 = 数値;」にすればという指摘と同じです。
42
42
 
43
43
 
44
44
 

4

修正

2021/07/26 12:13

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- **・追記**
35
+ **・別質問でZuishinさんの様に理解出来ない方がいたようなので追記**
36
36
 
37
37
  > `GManager.instance.kazeint++`の様に直接加算させる
38
38
 

3

修正

2021/07/26 12:12

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -29,3 +29,21 @@
29
29
 
30
30
 
31
31
  ちなみに現状は8回ループ加算されるのでその部分を修正しても一回で8増えます
32
+
33
+
34
+
35
+ **・追記**
36
+
37
+ > `GManager.instance.kazeint++`の様に直接加算させる
38
+
39
+
40
+
41
+ 別質問で退会済みユーザーさんが「GManager.Instance.変数名 = 数値;」にすればという指摘と同じです。
42
+
43
+
44
+
45
+ > 参照渡しになる作りに変える
46
+
47
+
48
+
49
+ 大元から作り変える事になり手間ですが参照型を使って作り変えて下さいという話です。別質問ではDictinaryに変更して解決されたようで良かったです。

2

修正

2021/07/26 12:11

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- 上記の値が変化しないという話かと思いますが`List<Data> myData`を宣言時の`numbers = GManager.instance.kazeint`は参照渡しでは無いので`myData`内の`numbers`を増やしても親元の値は変化はしません。
17
+ 上記の値が変化しないという話かと思いますが`List<Data> myData`を宣言時の`numbers = GManager.instance.kazeint`は渡しので`myData`内の`numbers`を増やしても親元の値は変化はしません。
18
18
 
19
19
 
20
20
 

1

修正

2021/07/26 11:45

投稿

Tto777
Tto777

スコア189

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- 上記の値が変化しないという話かと思いますが`List<Data> myData`を宣言時の`numbers = GManager.instance.kazeint`は渡しでは無いので`myData`内の`numbers`を増やしても親元の値は変化はしません。
17
+ 上記の値が変化しないという話かと思いますが`List<Data> myData`を宣言時の`numbers = GManager.instance.kazeint`は参照渡しでは無いので`myData`内の`numbers`を増やしても親元の値は変化はしません。
18
18
 
19
19
 
20
20