###前提・実現したいこと
Hitというフラグの1番目6番目がtrueの際、05はtrue、Hit06はfalseになります。
一定の範囲内に接触しているオブジェクトを消そうとしています。
上の図でオレンジ色のブロックに接触している、小さな青色のブロックが、
右から順に「Hit01」「Hit02」...とフラグを持っており、
オレンジ色のブロックの当たり判定範囲に入ると、このフラグがTrueになります。
上の図の場合、Hit01
ブロックを消す際には別の当たり判定をとっており、
こちらには「ALL_OK」というフラグが入っています。
「ALL_OK」は、Hit01~Hit06のフラグが全てtrueになった際、trueになります。
この「ALL_OK」がtrueになった際、
当たり判定に接触しているオブジェクトを全て消すためのスクリプトで悩んでいます。
現在はこの当たり判定にCountの変数を追加し、ヒットした回数分、
当たり判定に接触したブロックを消す処理を作ろうと考えています。
###発生している問題
ブロックを消す際、どのように記述すればブロックが消えるのか分からない
###該当のソースコード
こちらが青色のブロックにアタッチされているスクリプトです。
Hitフラグはオレンジ色のブロックと接触時にtrueに、
離れた時にfalseになります。
C#
1using UnityEngine; 2using System.Collections; 3 4public class Destroy01 : MonoBehaviour 5{ 6 //public static bool Hit01; //ヒットフラグ 7 public bool Hit01; 8 9 // Use this for initialization 10 void Start() 11 { 12 Hit01 = false; 13 } 14 15 // Update is called once per frame 16 void Update() 17 { 18 } 19 //ブロックと接触時に呼ばれる 20 void OnTriggerEnter2D(Collider2D other) 21 { 22 Hit01 = true; 23 } 24 //ブロックが離れる際に呼ばれる 25 void OnTriggerExit2D(Collider2D other) 26 { 27 Hit01 = false; 28 } 29}
続いて、こちらが問題のスクリプトになります。
こちらのスクリプトはブロックを消す際の当たり判定にアタッチしています
C#
1using UnityEngine; 2using System.Collections; 3using UnityEditor; 4 5public class Delete : MonoBehaviour 6{ 7 8 public bool ALL_OK = false; 9 public int Count = 0; 10 11 // Use this for initialization 12 void Start() 13 { 14 15 } 16 17 // Update is called once per frame 18 void Update() 19 { 20 //オブジェクトを読み込む 21 GameObject obj1 = GameObject.Find ("Cube_01"); 22 GameObject obj2 = GameObject.Find ("Cube_02"); 23 GameObject obj3 = GameObject.Find ("Cube_03"); 24 GameObject obj4 = GameObject.Find ("Cube_04"); 25 GameObject obj5 = GameObject.Find ("Cube_05"); 26 GameObject obj6 = GameObject.Find ("Cube_06"); 27 28 //オブジェクトにアタッチされているスクリプトを読み込む 29 Destroy01 d1 = obj1.GetComponent<Destroy01> (); 30 Destroy02 d2 = obj2.GetComponent<Destroy02> (); 31 Destroy03 d3 = obj3.GetComponent<Destroy03> (); 32 Destroy04 d4 = obj4.GetComponent<Destroy04> (); 33 Destroy05 d5 = obj5.GetComponent<Destroy05> (); 34 Destroy06 d6 = obj6.GetComponent<Destroy06> (); 35 36 //ALL_OKのフラグ管理 37 ALL_OK = false; 38 if (d1.Hit01 == true && d2.Hit02 == true && d3.Hit03 == true && 39 d4.Hit04 == true && d5.Hit05 == true && d6.Hit06 == true) 40 { 41 ALL_OK = true; 42 } 43 //Hitフラグが一つでもelseなら,ALL_OKはfalseになる 44 else 45 { 46 ALL_OK = false; 47 } 48 49 //------------------------------------------------ 50 //ブロックを消す処理 51 //------------------------------------------------ 52 53 //ブロックの削除とカウント数減 54 if(ALL_OK == true && Count>0) 55 { 56 //消す際にカウントをマイナスする。 57 Count -= 1; 58 //ここで一番下に作った当たり判定に接触している 59 //ブロックをすべて消す 60 61 //Destroy(other.gameObject); 62 63 //ブロックがヒットした数=カウント数=消したいブロック数なので 64 //0は消したいすべてのブロックが消えている状態 65 if (Count == 0) 66 { 67 Debug.Log ("count=0"); 68 //そろった列のHitをfalseに戻す 69 GameObject.Find("Cube_01").GetComponent<Destroy01>().Hit01 = false; 70 GameObject.Find("Cube_02").GetComponent<Destroy02>().Hit02 = false; 71 GameObject.Find("Cube_03").GetComponent<Destroy03>().Hit03 = false; 72 GameObject.Find("Cube_04").GetComponent<Destroy04>().Hit04 = false; 73 GameObject.Find("Cube_05").GetComponent<Destroy05>().Hit05 = false; 74 GameObject.Find("Cube_06").GetComponent<Destroy06>().Hit06 = false; 75 } 76 } 77 } 78 79 //オレンジ色のブロックと接触した際、カウントをプラスする 80 void OnTriggerEnter2D(Collider2D other) 81 { 82 Count += 1; 83 } 84 85} 86
###試したこと
現在上のコードでコメントにしている
//ここで一番下に作った当たり判定に接触している //ブロックをすべて消す Destroy(other.gameObject);
という処理を正常に動かすため、
void Updateのかっこに(Collider2D other)と記述してみましたが
ALL_OKがtrueになるはずの状況でもfalseのまま残ってしまったり、
Countがマイナスされなかったので、現在コメント化しています。
void OnTrigger2D(Collider2D other)
の中で処理を入れた際には一回しか回らず、
目的のオブジェクトを消しきれなかったので、
ブロックを消す処理はvoid Updateに入れて複数回回すようにしています。
OnTriggerEnterとStayの二つを試しました。
###補足情報(言語/FW/ツール等のバージョンなど)
言語はC#、使用ツールはUnity ver5.3、MonoDevelopです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/15 00:41
2016/07/15 03:51