- Home /
Breakout game turning bricks isTrigger true failed
I am making a breakout game. There is a button that when energy become 30 or more, it can be pushed to make bricks trigger. The first time is always successful to make the bricks isTrigger true. But for the second time or third time, it may fail to change isTrigger to true. Here is the code: using UnityEngine; using System.Collections;
public class ChickenStateButton : MonoBehaviour {
public GUITexture csAwaken;
public GUITexture csNormal;
public BoxCollider2D[] group;
public float passThroughTime;
public bool canPassThrough;
// Use this for initialization
void Start () {
csAwaken = GameObject.Find ("ChickenStateAwaken").GetComponent<GUITexture> ();
csNormal = GameObject.Find ("ChickenStateNormal").GetComponent<GUITexture> ();
guiTexture.pixelInset = new Rect (Screen.width / 2.75f, Screen.height / -13.84444444f, Screen.width / 8.020833333f, Screen.height / 12.97916667f);
passThroughTime = 5f;
canPassThrough = false;
}
// Update is called once per frame
void Update () {
if (Ball.energy < 30f) {
guiTexture.texture = csNormal.texture;
} else {
guiTexture.texture = csAwaken.texture;
}
if (Input.touches.Length > 0) {
for (int i = 0; i < Input.touchCount; i++) {
if (this.guiTexture.HitTest (Input.GetTouch (i).position)) {
if (Input.GetTouch (i).phase == TouchPhase.Ended) {
if (Ball.energy >= 30f) {
passThrough ();
Ball.energy = 0f;
}
}
}
}
}
if (canPassThrough) {
passThroughTime -= Time.deltaTime;
} else {
passThroughTime = 5f;
}
if (passThroughTime <= 0) {
group = GameObject.Find ("Groups").GetComponentsInChildren<BoxCollider2D> ();
for (int i = 0; i < group.Length; i++) {
group[i].isTrigger = false;
}
canPassThrough = false;
}
}
private void passThrough () {
canPassThrough = true;
group = GameObject.Find ("Groups").GetComponentsInChildren<BoxCollider2D> ();
if (canPassThrough) {
for (int i = 0; i < group.Length; i++) {
group[i].isTrigger = true;
}
}
}
void OnMouseDown () {
if (Ball.energy >= 30f) {
passThrough ();
Ball.energy = 0f;
}
}
}
Can anyone explain why it will fail when second time or third time and how to change it?
Answer by mgsteinkamp · Apr 27, 2014 at 11:55 AM
Are you setting anything to inactive? Try GetComponentsInChildren (false).
You can't mess with inactive parts
Try this code:
try{
if (passThroughTime <= 0) {
group = GameObject.Find ("Groups").GetComponentsInChildren ();
for (int i = 0; i < group.Length; i++) {
group[i].isTrigger = false;
}
}
catch(Exception e){
Debug.log("Exception in turning off passthrough");
}
Well, what means by inactive? I am a bit new of Unity...
When you break a block, what do you do? Do you use Destroy or SetActive(False)? Either way, I'm fairly sure you're throwing an exception with one (or both) of your loops. Try the code I just posted in my edit and you'll be able to see
I tried your code but it did not show anything in Debug and did not show any error. It still can be true of isTrigger when the second or third time...
Your answer
Follow this Question
Related Questions
image click quiz button problem 0 Answers
Trigger Sound more than Once 0 Answers
Select monobehaviour function from inspector 1 Answer
OnTrigger Down, Call the Button's OnClicked event 2 Answers
Triggering platform animation on colliding with Button 0 Answers