回答編集履歴

1 7/15 09:41のコメントを受けて追記

sakura_hana

sakura_hana score 9473

2016/07/15 10:43  投稿

(7/15 09:41のコメントを受けて追記)  
なるほど、消すのはオレンジ色のブロックだったんですね。  
それであれば、下記のように変更すればよいかと思います。  
 
Destroyクラス(02〜06も同様)  
```C#  
using UnityEngine;  
using System.Collections;  
 
public class Destroy01 : MonoBehaviour  
{  
   //public static bool Hit01;   //ヒットフラグ  
   public bool Hit01;  
 
   //当たった相手オブジェクト  
   public GameObject hitObj;  
 
   // Use this for initialization  
   void Start()  
   {  
       Hit01 = false;  
   }  
 
   // Update is called once per frame  
   void Update()  
   {  
   }  
   //ブロックと接触時に呼ばれる  
   void OnTriggerEnter2D(Collider2D other)  
   {  
       Hit01 = true;       
       hitObj = other.gameObject;  
   }  
   //ブロックが離れる際に呼ばれる  
   void OnTriggerExit2D(Collider2D other)  
   {  
       Hit01 = false;       
       hitObj = null;  
   }  
}  
```  
 
Deleteクラス(if(ALL_OK == true && Count>0)の部分を差し替え)  
```C#  
           if(ALL_OK == true) {  
           //ここで一番下に作った当たり判定に接触している  
           //ブロックをすべて消す  
 
           if (d1.hitObj != null) { Destroy(d1.hitObj); }  
           if (d2.hitObj != null) { Destroy(d2.hitObj); }  
           if (d3.hitObj != null) { Destroy(d3.hitObj); }  
           if (d4.hitObj != null) { Destroy(d4.hitObj); }  
           if (d5.hitObj != null) { Destroy(d5.hitObj); }  
           if (d6.hitObj != null) { Destroy(d6.hitObj); }  
 
           d1.Hit01 = false;  
           d2.Hit01 = false;  
           d3.Hit01 = false;  
           d4.Hit01 = false;  
           d5.Hit01 = false;  
           d6.Hit01 = false;  
       }  
```  
---  
(初期投稿分)  
まず、UpdateではなくFixedUpdateを使いましょう。
Updateが「1フレームに1回(フレームレートによって逐次変動)」呼ばれるのに対し、FixedUpdateは「一定周期(物理演算と同周期)」で呼ばれます。
OnTriggerEnter2Dなどの物理演算に伴うメソッドはFixedUpdateと同周期で呼ばれる為、Updateと齟齬が発生する場合があります。
大きな処理をさせるとUpdateは遅れるので、例えば以下のような状態になる訳です。
こうなると、両者でカウントを共有している場合は当然ズレます。
Update1回目 → → → → → → →Update2回目
FixedUpdate1回目→FixedUpdate2回目→FixedUpdate3回目
但し今回の場合、「全ての青キューブがオレンジのオブジェクトと衝突していたら、全ての青キューブを消去する」ということでしたら、カウントは必要無いように思います。
以下だけで目的は達成出来るのではないかと。(if(ALL_OK == true && Count>0)の部分を差し替え)
```C#
if(ALL_OK == true) {
 Destroy(obj1);
 Destroy(obj2);
 Destroy(obj3);
 Destroy(obj4);
 Destroy(obj5);
 Destroy(obj6);
}
```
なお、Destroy後はFindもGetComponentも効かなくなるので、nullチェックを挟む必要が出て来ます。
更に言うとUpdateの中でFindやGetComponentは使うべきではありません。
Startで行っておいてUpdate(FixedUpdate)の中ではnullチェックのみ実行、存在していたらフラグを取得、などとやるべきかと思います。
(もっと言えばDestroy01などのクラスをわざわざ6種類作る意味があるのかな?という気がしますが……)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る