回答編集履歴

5

追記 使い方

2017/10/06 16:24

投稿

IShix
IShix

スコア1724

test CHANGED
@@ -18,6 +18,44 @@
18
18
 
19
19
 
20
20
 
21
+
22
+
23
+
24
+
25
+ **使い方**
26
+
27
+ 0. 下記コードをコピーしcreateRandObjsという名前でスクリプトとして保存
28
+
29
+ ![createRandObjs](007ef06b93ba7cb5a2cb1e295d79c0aa.png)
30
+
31
+
32
+
33
+ 0. ゲームオブジェクトをヒエラルキーに作成
34
+
35
+ ![ゲームオブジェクト](37adff088d148ac95c19c86ed7603fff.png)
36
+
37
+
38
+
39
+ 0. createRandObjs.csをオブジェクトにアタッチ
40
+
41
+ ![イメージ説明](f2c8d8703271203ee5ad07e03fcce602.png)
42
+
43
+
44
+
45
+ 0. ゲームオブジェクトのインスペクタに配列が入れられるようになっているのでオブジェクトを追加
46
+
47
+ ![オブジェクトを追加](1da633a3337ee73945bf05729cd354c4.png)
48
+
49
+
50
+
51
+ **5. 別スクリプトから「createRandObjs.Instance.spawnNext();」を呼ぶ**
52
+
53
+
54
+
55
+ 以上です。
56
+
57
+
58
+
21
59
  **外から呼ばれるということなのでシングルトンにしました。**
22
60
 
23
61
 
@@ -190,7 +228,7 @@
190
228
 
191
229
 
192
230
 
193
- ### とりあえずコード量を抑える為、必要最低限にしています。
231
+ ### [以降は読まなくてもいいです] とりあえずコード量を抑える為、必要最低限にしています。
194
232
 
195
233
  どこまで完成しているか分からないのでなんとも言えないのですが今のコードでは不十分に感じます。考えられるのはこんな感じです。
196
234
 

4

追記

2017/10/06 16:24

投稿

IShix
IShix

スコア1724

test CHANGED
@@ -220,12 +220,16 @@
220
220
 
221
221
  {
222
222
 
223
- public void destroyAnime(int[] targetYs)
223
+ public bool destroyAnime(int[] targetYs)
224
224
 
225
225
  {
226
226
 
227
227
  //略
228
228
 
229
+ //色々して全部消えたらtrueを送る
230
+
231
+ return true;
232
+
229
233
  }
230
234
 
231
235
  }
@@ -238,11 +242,9 @@
238
242
 
239
243
  {
240
244
 
245
+ // 生成する時についでにこの配列に参照を渡しておく
246
+
241
- //とりあえずインスペクタからオブジェクトを追加 GameObject同様そのままインスペクタからアタッチでいけます。
247
+ List<objScript> objScripts = new List<objScript>();
242
-
243
- [SerializeField]
244
-
245
- objScript[] objcts;
246
248
 
247
249
 
248
250
 
@@ -256,7 +258,11 @@
256
258
 
257
259
  //1,2列目を破棄
258
260
 
259
- objcts[0].destroyAnime(new int[]{ 1,2 });
261
+ var isDeleteObj = objScripts[0].destroyAnime(new int[]{ 1,2 });
262
+
263
+ //もしオブジェクトが完全に消えたら何かする
264
+
265
+ if(isDeleteObj) objScripts.RemoveAt(0);
260
266
 
261
267
  }
262
268
 

3

誤字修正

2017/10/05 20:47

投稿

IShix
IShix

スコア1724

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- Unityの本を買って説明を読みながら掲載されているサンプルを手打ちで打っていくとある程度わかってくると思います。Unityはどんどこ進んでいるのでネット上は古い情報も多いので目的に辿りつくまで時間がかかります。今は本で学ぶのが一番です。
11
+ Unityの本を買って説明を読みながら掲載されているサンプルを手打ちで打っていくとある程度わかってくると思います。Unityはどんどこ進んでいるので今は本で学ぶのが一番です。
12
12
 
13
13
 
14
14
 
@@ -196,7 +196,7 @@
196
196
 
197
197
 
198
198
 
199
- - オブジェクトの移動完了状態を直接知ることができない
199
+ - オブジェクトの移動完了などの状態を直接知ることができない
200
200
 
201
201
  - テトリスの場合、マップ的なものを用意してx軸が埋まっていれば(略)などの処理の対応
202
202
 
@@ -204,7 +204,7 @@
204
204
 
205
205
 
206
206
 
207
- などですかね?僕ならオブジェクト一つ一つにスクリプトをつけてそこで、自身の調整と外部への自身の状態や消えるアニメーションのスタートやエンドなどを提供をする形にすると思います。
207
+ などですかね?僕ならオブジェクト一つ一つにスクリプトをつけてそこで、自身の調整や管理と外部への自身の状態や消えるアニメーションのスタートやエンドなどを提供をする形にすると思います。
208
208
 
209
209
 
210
210
 
@@ -256,7 +256,7 @@
256
256
 
257
257
  //1,2列目を破棄
258
258
 
259
- objcts[0].destroyAnime(new int[2]{ 1,2 });
259
+ objcts[0].destroyAnime(new int[]{ 1,2 });
260
260
 
261
261
  }
262
262
 

2

追記

2017/10/05 20:38

投稿

IShix
IShix

スコア1724

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- ###外から呼ばれるということなのでシングルトンにしました。
21
+ **外から呼ばれるということなのでシングルトンにしました。**
22
22
 
23
23
 
24
24
 
@@ -187,3 +187,77 @@
187
187
  createRandObjs.Instance.spawnNext();
188
188
 
189
189
  ```
190
+
191
+
192
+
193
+ ### とりあえずコード量を抑える為、必要最低限にしています。
194
+
195
+ どこまで完成しているか分からないのでなんとも言えないのですが今のコードでは不十分に感じます。考えられるのはこんな感じです。
196
+
197
+
198
+
199
+ - オブジェクトの移動完了や状態を直接知ることができない
200
+
201
+ - テトリスの場合、マップ的なものを用意してx軸が埋まっていれば(略)などの処理の対応
202
+
203
+ - 消える時のアニメーション
204
+
205
+
206
+
207
+ などですかね?僕ならオブジェクト一つ一つにスクリプトをつけてそこで、自身の調整と外部への自身の状態や消えるアニメーションのスタートやエンドなどを提供をする形にすると思います。
208
+
209
+
210
+
211
+ それをこんな感じでコントロール側で持つと思います。
212
+
213
+
214
+
215
+ ```C#
216
+
217
+ //これをオブジェクトひとつひとつにアタッチする
218
+
219
+ public class objScript : MonoBehaviour
220
+
221
+ {
222
+
223
+ public void destroyAnime(int[] targetYs)
224
+
225
+ {
226
+
227
+ //略
228
+
229
+ }
230
+
231
+ }
232
+
233
+
234
+
235
+ //引数などは適当です。実際はint[]を渡す形で組まないかもしれません。
236
+
237
+ public class createRandObjs : MonoBehaviour
238
+
239
+ {
240
+
241
+ //とりあえずインスペクタからオブジェクトを追加 GameObject同様そのままインスペクタからアタッチでいけます。
242
+
243
+ [SerializeField]
244
+
245
+ objScript[] objcts;
246
+
247
+
248
+
249
+ void destroyAnime()
250
+
251
+ {
252
+
253
+ //略
254
+
255
+
256
+
257
+ //1,2列目を破棄
258
+
259
+ objcts[0].destroyAnime(new int[2]{ 1,2 });
260
+
261
+ }
262
+
263
+ ```

1

コメント修正

2017/10/05 20:32

投稿

IShix
IShix

スコア1724

test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
  get {
62
62
 
63
- //インスタンスがなければインスタンスを生成 Awakeより先に呼ばれる可能性があるのでここでもチェックが必要です。
63
+ //インスタンスがなければインスタンスを生成 Awakeより先にこのプロパティが呼ばれる可能性があるのでここでもチェックとnullあればインスタンス化します。
64
64
 
65
65
  if(instance == null) instance = (createRandObjs) FindObjectOfType( typeof(createRandObjs) );
66
66