質問編集履歴

6

タグの追加

2021/03/07 12:45

投稿

BRAK
BRAK

スコア98

test CHANGED
File without changes
test CHANGED
File without changes

5

中身の修正

2021/03/07 12:45

投稿

BRAK
BRAK

スコア98

test CHANGED
File without changes
test CHANGED
@@ -616,4 +616,4 @@
616
616
 
617
617
 
618
618
 
619
- ![イメージ説明](fab8b613a487d50b428ed4d458800465.png)
619
+ ![イメージ説明](4982ec700671807d77313f92e8c359a4.png)

4

中身の修正

2021/03/07 12:19

投稿

BRAK
BRAK

スコア98

test CHANGED
File without changes
test CHANGED
@@ -611,3 +611,9 @@
611
611
 
612
612
 
613
613
  この順番だと、Moveまで生成されます。しかし、EnemyやMoveもJsonを参照しているので訳が分かりません。
614
+
615
+
616
+
617
+
618
+
619
+ ![イメージ説明](fab8b613a487d50b428ed4d458800465.png)

3

中身の修正

2021/03/07 10:48

投稿

BRAK
BRAK

スコア98

test CHANGED
File without changes
test CHANGED
@@ -587,3 +587,27 @@
587
587
  }
588
588
 
589
589
  ```
590
+
591
+
592
+
593
+ もしかしたら、JSONのデータから値を割り当てる際にUnity上では正常に動いていたけど、ビルドすると壊れることが起こっているのかもしれません。
594
+
595
+
596
+
597
+ フロア生成順の際にJsonから参照するブロックを生成したときにブロックのみ生成されてそこでfor文が死んだような現象が起こったので、わからないですが。。
598
+
599
+
600
+
601
+       SwicthWALL,//壁を生成
602
+
603
+ SwitchPlayerGoal,//プレイヤーとゴールを生成
604
+
605
+ SwitchEnemy,//敵を生成
606
+
607
+ SwitchJump,//ジャンプ台を生成
608
+
609
+ SwitchMove,//フロア移動
610
+
611
+
612
+
613
+ この順番だと、Moveまで生成されます。しかし、EnemyやMoveもJsonを参照しているので訳が分かりません。

2

中身の修正

2021/03/07 10:42

投稿

BRAK
BRAK

スコア98

test CHANGED
File without changes
test CHANGED
@@ -27,3 +27,563 @@
27
27
 
28
28
 
29
29
  他に良い方法はないでしょうか。
30
+
31
+
32
+
33
+ ものすごい長いですが
34
+
35
+
36
+
37
+ 定義(特に見る必要はなし)
38
+
39
+ ```C#
40
+
41
+ コード
42
+
43
+ /// <summary>
44
+
45
+ /// イベントブロック説明をJsonから取得します
46
+
47
+ /// </summary>
48
+
49
+ JsonInfo ji;
50
+
51
+
52
+
53
+ /// <summary>
54
+
55
+ /// 生成する初期位置
56
+
57
+ /// </summary>
58
+
59
+ readonly Vector2 createInitPos = new Vector2(-8.5f, 5.5f);
60
+
61
+
62
+
63
+ #region 生成するオブジェクト
64
+
65
+
66
+
67
+ #region ステージごとに変わるタイル
68
+
69
+
70
+
71
+ //----------WALL----------//
72
+
73
+ [Header("Wall")]
74
+
75
+ /// <summary>
76
+
77
+ /// 壁
78
+
79
+ /// </summary>
80
+
81
+ [SerializeField] WallsClass[] wc;
82
+
83
+
84
+
85
+ //----------BackGround----------//
86
+
87
+ [Header("BackGround")]
88
+
89
+ /// <summary>
90
+
91
+ /// 背景
92
+
93
+ /// </summary>
94
+
95
+ [SerializeField] BackGroundClass[] bc;
96
+
97
+
98
+
99
+ //----------Decoration----------//
100
+
101
+ [Header("Decoration")]
102
+
103
+ /// <summary>
104
+
105
+ /// 装飾
106
+
107
+ /// </summary>
108
+
109
+ [SerializeField] DecorationClass[] dc;
110
+
111
+
112
+
113
+ #endregion
114
+
115
+
116
+
117
+ #region 全ステージ共通のタイル
118
+
119
+
120
+
121
+ //----------PLAYER ENEMY GOAL----------//
122
+
123
+ [Header("Player/Goal")]
124
+
125
+ /// <summary>
126
+
127
+ /// プレイヤー
128
+
129
+ /// </summary>
130
+
131
+ [SerializeField] GameObject player;
132
+
133
+ [SerializeField] GameObject goal;
134
+
135
+ [Header("Enemy")]
136
+
137
+ /// <summary>
138
+
139
+ /// エネミー
140
+
141
+ /// </summary>
142
+
143
+ [SerializeField] GameObject[] enemy;
144
+
145
+
146
+
147
+ //----------JUMP----------//
148
+
149
+ [Header("Jump")]
150
+
151
+ /// <summary>
152
+
153
+ /// 初期位置
154
+
155
+ /// </summary>
156
+
157
+ [SerializeField] GameObject initPos;
158
+
159
+
160
+
161
+ /// <summary>
162
+
163
+ /// ジャンプ台
164
+
165
+ /// </summary>
166
+
167
+ [SerializeField] GameObject[] jumpObj;
168
+
169
+
170
+
171
+ //----------EventItem----------//
172
+
173
+ [Header("EventItem")]
174
+
175
+ [SerializeField] GameObject[] item;
176
+
177
+
178
+
179
+ //----------EventBlock----------//
180
+
181
+ [Header("EventBlock")]
182
+
183
+ [SerializeField] GameObject[] block;
184
+
185
+
186
+
187
+ //----------EventBlock----------//
188
+
189
+ [Header("Move")]
190
+
191
+ [SerializeField] GameObject moveObj;
192
+
193
+ [SerializeField] GameObject[] catArrow;
194
+
195
+
196
+
197
+ #endregion
198
+
199
+
200
+
201
+ #endregion
202
+
203
+
204
+
205
+ /// <summary>
206
+
207
+ /// 各ステージフロア作成
208
+
209
+ /// </summary>
210
+
211
+ /// <param name="tileNum">タイルナンバー</param>
212
+
213
+ /// <param name="pos">生成位置</param>
214
+
215
+ /// <param name="floor">生成元の親オブジェクト</param>
216
+
217
+ /// <param name="floorNum">現在のフロア数</param>
218
+
219
+ delegate void TileMap(string tileNum, Vector2 pos, GameObject floor, int floorNum);
220
+
221
+ TileMap[] tileList;
222
+
223
+ TileMap tile;
224
+
225
+ readonly string[] pathName = { "Wall", "PlayerGoal", "Enemy", "Jump", "Move", "EventItem", "EventBlock", "BackGround", "Decoration" };
226
+
227
+ /// <summary>
228
+
229
+ /// 生成カウント
230
+
231
+ /// </summary>
232
+
233
+ int counter = 0;
234
+
235
+ /// <summary>
236
+
237
+ /// 矢印用カウンタ―
238
+
239
+ /// </summary>
240
+
241
+ int arrowCounter = 0;
242
+
243
+ /// <summary>
244
+
245
+ /// ステージ番号
246
+
247
+ /// ステージ選択時にセットします
248
+
249
+ /// </summary>
250
+
251
+ static int fileNum = 0;
252
+
253
+ /// <summary>
254
+
255
+ /// ステージ内のフロア数
256
+
257
+ /// </summary>
258
+
259
+ readonly static int[] floorCount = { 3, 8 };
260
+
261
+ /// <summary>
262
+
263
+ /// 現在のステージのフロア数を返します
264
+
265
+ /// </summary>
266
+
267
+ public static int FloorCount
268
+
269
+ {
270
+
271
+ get
272
+
273
+ {
274
+
275
+ return floorCount[fileNum];
276
+
277
+ }
278
+
279
+ }
280
+
281
+
282
+
283
+ /// <summary>
284
+
285
+ /// 各ステージのX,Y長さ
286
+
287
+ /// </summary>
288
+
289
+ readonly Vector2[] stageVec = { new Vector2(19 - 1, 11 + 1), new Vector2(20 - 1, 11) };
290
+
291
+
292
+
293
+ /// <summary>
294
+
295
+ /// 横のステージのフロア数
296
+
297
+ /// </summary>
298
+
299
+ readonly static int[] stageX = { 3, 4 };
300
+
301
+ public static int StageX
302
+
303
+ {
304
+
305
+ get
306
+
307
+ {
308
+
309
+ return stageX[fileNum];
310
+
311
+ }
312
+
313
+ }
314
+
315
+
316
+
317
+ /// <summary>
318
+
319
+ /// ステージ番号
320
+
321
+ /// </summary>
322
+
323
+ public static string stageID = "";
324
+
325
+
326
+
327
+ ```
328
+
329
+
330
+
331
+ Awake時、読み込む関数を格納
332
+
333
+
334
+
335
+ CreateStage()
336
+
337
+ フロアによって位置を変えて各フロアの位置を出します
338
+
339
+
340
+
341
+ ```C#
342
+
343
+ コード
344
+
345
+ private void Awake()
346
+
347
+ {
348
+
349
+ //ステージ番号のステージを作成します
350
+
351
+ fileNum = GameManager.Instance.StageNo;
352
+
353
+ //fileNum = 0;
354
+
355
+
356
+
357
+ //現在のステージ番号を指定します
358
+
359
+ stageID = string.Format("stage{0}", fileNum + 1);
360
+
361
+
362
+
363
+ ji = new JsonInfo();
364
+
365
+ ji.MapJson();
366
+
367
+
368
+
369
+ tileList = new TileMap[]
370
+
371
+ {
372
+
373
+ SwicthWALL,//壁を生成
374
+
375
+ SwitchPlayerGoal,//プレイヤーとゴールを生成
376
+
377
+ SwitchEnemy,//敵を生成
378
+
379
+ SwitchJump,//ジャンプ台を生成
380
+
381
+ SwitchMove,//フロア移動
382
+
383
+ SwitchEventItem,//イベントアイテムを生成
384
+
385
+ SwitchEventBlock,//イベントブロックを生成
386
+
387
+ SwitchBack,//背景生成
388
+
389
+ SwitchDecoration//デコレーション生成
390
+
391
+ };
392
+
393
+
394
+
395
+ //ステージ作成
396
+
397
+ CreateStage();
398
+
399
+
400
+
401
+ //オブジェクトを破棄します
402
+
403
+ //Destroy(gameObject);
404
+
405
+ }
406
+
407
+
408
+
409
+ #region マップ生成読み込み
410
+
411
+
412
+
413
+ /// <summary>
414
+
415
+ /// ステージの作成
416
+
417
+ /// </summary>
418
+
419
+ void CreateStage()
420
+
421
+ {
422
+
423
+ //CSVからデータを読み込む
424
+
425
+ for (int sNum = 0; sNum < FloorCount; sNum++)
426
+
427
+ {
428
+
429
+ //余りが横
430
+
431
+ float stageVecX = sNum % StageX;
432
+
433
+ //商が縦
434
+
435
+ float stageVecY = sNum / StageX;
436
+
437
+
438
+
439
+ var vec = Vector2.zero;
440
+
441
+ //このステージの横縦長さ * ステージのx(横のフロア)とy(縦のフロア)の何番目か + 作成する初期位置
442
+
443
+ vec.x = stageVec[fileNum].x * stageVecX + createInitPos.x;
444
+
445
+ vec.y = (-stageVec[fileNum].y) * stageVecY + createInitPos.y;
446
+
447
+
448
+
449
+
450
+
451
+ //ステージを格納する空のオブジェクトを作成(フロアごとに分けてここに入れます)
452
+
453
+ var obj = Resources.Load<GameObject>("StageEmpty");
454
+
455
+ var floor = Instantiate(obj, transform.position, Quaternion.identity);
456
+
457
+ floor.name = sNum.ToString();
458
+
459
+
460
+
461
+ for (int i = 0; i < tileList.Length; i++)
462
+
463
+ {
464
+
465
+ var stageNo = fileNum + 1;
466
+
467
+ var filePath = string.Format("Stage/Stage{0}/{1}/{2}", stageNo, sNum + 1, pathName[i]);
468
+
469
+ CSVRead(filePath, i, floor, vec, sNum);
470
+
471
+ }
472
+
473
+ }
474
+
475
+ }
476
+
477
+ ```
478
+
479
+
480
+
481
+ CSVRead() CSVからの読み込み(JSON)
482
+
483
+ ```C#
484
+
485
+ コード
486
+
487
+ /// <summary>
488
+
489
+ /// CSVファイルの読み込み
490
+
491
+ /// </summary>
492
+
493
+ void CSVRead(string stageTagName, int num, GameObject floor, Vector2 createPos, int floorNum)
494
+
495
+ {
496
+
497
+ //csvファイルの検索
498
+
499
+ var csvFile = Resources.Load(stageTagName) as TextAsset;
500
+
501
+
502
+
503
+ if (csvFile == null) return;
504
+
505
+
506
+
507
+ //csvファイルの読み込み
508
+
509
+ var reader = new StringReader(csvFile.text);
510
+
511
+
512
+
513
+ //数字文字を解析しステージを作成します
514
+
515
+ StringMozi(reader, num, floor, createPos, floorNum);
516
+
517
+ }
518
+
519
+ ```
520
+
521
+
522
+
523
+
524
+
525
+ StringMozi() CSVの文字 (例え)横11行縦18列の読み込み
526
+
527
+ ```C#
528
+
529
+ コード
530
+
531
+ /// <summary>
532
+
533
+ /// ファイルの内の","で文字を区切ります
534
+
535
+ /// </summary>
536
+
537
+ void StringMozi(StringReader reader, int num, GameObject floor, Vector2 createPos, int floorNum)
538
+
539
+ {
540
+
541
+ var pos = createPos;
542
+
543
+ tile = tileList[num];
544
+
545
+ //読み取り対象がなくなるまで繰り返します
546
+
547
+ while (reader.Peek() != -1)
548
+
549
+ {
550
+
551
+ //一行づつ読み込みます
552
+
553
+ string line = reader.ReadLine();
554
+
555
+
556
+
557
+ string[] split = line.Split(',');//,で区切ります
558
+
559
+ foreach (var tileNum in split)
560
+
561
+ {
562
+
563
+ //現在の作成物
564
+
565
+ tile(tileNum, pos, floor, floorNum);
566
+
567
+ //生成位置を変更します
568
+
569
+ pos.x += 1;
570
+
571
+ }
572
+
573
+ //xを初期位置yを-1下げたところから生成を再開しします
574
+
575
+ pos.x = createPos.x;
576
+
577
+ pos.y -= 1;
578
+
579
+ }
580
+
581
+ //生成カウントの初期化
582
+
583
+ counter = 0;
584
+
585
+ arrowCounter = 0;
586
+
587
+ }
588
+
589
+ ```

1

中身の修正

2021/03/07 10:36

投稿

BRAK
BRAK

スコア98

test CHANGED
File without changes
test CHANGED
@@ -16,4 +16,14 @@
16
16
 
17
17
 
18
18
 
19
+ 考えていることは、
20
+
19
- 考えていることは、スクリプトを9個に分けて個々で処理をさせることしか思いつきません。
21
+ スクリプトを9個に分けて個々で処理をさせる
22
+
23
+ ・描画するマップ位置のみ生成する(書いてきたコードがすべて破綻してしまうので厳しいです)
24
+
25
+ しか思いつきません
26
+
27
+
28
+
29
+ 他に良い方法はないでしょうか。