###前提・実現したいこと
上の画像の青いブロックとオレンジ色のブロックが接触した際、
青いブロックではHitというフラグがtrueになるプログラムが入っています。
また、青いブロックすべてのフラグがtrueになった際、
下の画像の緑色の枠に接触しているオレンジ色のブロックを消し、
ブロックが消えた場合にはHitの判定をTrueからfalseに戻すというプログラムを組もうとしています。
###発生している問題・エラーメッセージ
void ontriggerstay2Dで判定を取り、
Trueとfalseを判断しているのですが、ブロックをDestroyで消した際、falseになりません。
void ontriggerExitを入れてみても、そこまでコードが通りませんでした。
###該当のソースコード
こちらが青色のブロックにアタッチしているコードです。
各青色のブロックにはそれぞれ、Hit01~Hit06の数字が入っています。
C#
1using UnityEngine; 2using System.Collections; 3 4public class Destroy01 : MonoBehaviour 5{ 6 7 //public static bool Hit01; //ヒットフラグ 8 public bool Hit01; 9 10 // Use this for initialization 11 void Start() 12 { 13 Hit01 = false; 14 } 15 16 // Update is called once per frame 17 void Update() 18 { 19 } 20 //ブロックと接触時に呼ばれる 21 void OnTriggerStay2D(Collider2D other) 22 { 23 Hit01 = true; 24 } 25 //ブロックが離れる際に呼ばれる 26 void OnTriggerExit2D(Collider2D other) 27 { 28 Hit01 = false; 29 } 30 31 32}
こちらが緑色の枠にアタッチしているコードです。
緑色の枠はCreateEmptyで作成したGameObjectに
Add componentでBoxCollider2Dを作成し、
横長に引き伸ばしたもので作成しました。
is Triggerですり抜けるように設定し、当たり判定をとっています。
C#
1using UnityEngine; 2using System.Collections; 3 4public class Delete : MonoBehaviour 5{ 6 7 public bool ALL_OK; 8 9 // Use this for initialization 10 void Start() 11 { 12 13 } 14 15 // Update is called once per frame 16 void Update() 17 { 18 19 20 GameObject obj1 = GameObject.Find("Cube_00"); 21 GameObject obj2 = GameObject.Find("Cube_01"); 22 GameObject obj3 = GameObject.Find("Cube_02"); 23 GameObject obj4 = GameObject.Find("Cube_03"); 24 GameObject obj5 = GameObject.Find("Cube_04"); 25 GameObject obj6 = GameObject.Find("Cube_05"); 26 27 Destroy01 d1 = obj1.GetComponent<Destroy01>(); 28 Destroy02 d2 = obj2.GetComponent<Destroy02>(); 29 Destroy03 d3 = obj3.GetComponent<Destroy03>(); 30 Destroy04 d4 = obj4.GetComponent<Destroy04>(); 31 Destroy05 d5 = obj5.GetComponent<Destroy05>(); 32 Destroy06 d6 = obj6.GetComponent<Destroy06>(); 33 34 if (d1.Hit01 == true && d2.Hit02 == true && d3.Hit03 == true && 35 d4.Hit04 == true && d5.Hit05 == true && d6.Hit06 == true) 36 { 37 ALL_OK = true; 38 } 39 40 41 } 42 43 44 void OnTriggerStay2D(Collider2D other) 45 { 46 while (ALL_OK == true) 47 { 48 Destroy(other.gameObject); 49 } 50 } 51}
###試したこと
breakをif文の処理に入れてみたり、Destroyの後にALL_OKフラグをfalseに変えてみたり、
ifをwhileに変えてみたりしましたが、効果はありませんでした。
また、void ontriggerEnit2Dで処理を抜けようとしましたが、抜けられませんでした。VSTUで確認したところ、ずっとif文の中をループしてしまいます
###補足情報(言語/FW/ツール等のバージョンなど)
使用言語はC#、使用ツールはUnity5.3、Visual Stdio2013を使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/04 01:25