Search code examples
unity-game-enginedestroy

unity 3d make prefab object undestroyable/unclibable


Ok, I made preafab whic represent match. With script attached to main camera I made 15 matches,

using UnityEngine;
using System.Collections;
using System;
using UnityEngine.UI;

public class LoadMatches : MonoBehaviour {
public GameObject match;

GameObject[] matchArray = new GameObject[15];

void Start () {

    DrawMatches();
 }
private void DrawMatches()
{


    int y = 4;
    int x = -4;
    int n = 0;
          for (int i = -4; i < 5; i += 2)
        {
            for (int j = x; j < y + 1; j += 2)
            {
             matchArray[n]=Instantiate(match, new Vector3(j, i, 0), Quaternion.identity) as GameObject;
             matchArray[n].name= Convert.ToString(n);
             n++;
            }
            y = y - 1;
            x = x + 1;
        }
}

}

and I got this

enter image description here

When I click on the object object have to be destroyed (made that) but when I click on the object in some row I have to made that only that object can be destroyed all others matcher in other row have to became undestroyable/unclickabe till button is pressed.

using UnityEngine;
using System.Collections;
using System;
using UnityEngine.UI;
public class DragDrop : MonoBehaviour {
float x;
float y;
public GameObject match;
private txtGameOver txtGO;

private void Awake()
{
    txtGO = GameObject.FindObjectOfType<txtGameOver>();
}

private void Start()
{
    match.GetComponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezeAll;

 }
 void Update(){
    x = Input.mousePosition.x;
    y = Input.mousePosition.y;
}
void OnMouseDrag(){
    transform.position = Camera.main.ScreenToWorldPoint(new Vector3(x,y,10.0f));
}
void OnMouseDown()
{
    var boxes = GameObject.FindGameObjectsWithTag("Match");

    SelectMatches(match);
    if (boxes.Length == 1)
    {
        txtGO.GameOverText();
    }
}
void SelectMatches (GameObject m)
{
   int n;
   n = Convert.ToInt32(m.name);
     if (n>=0 && n<=4)
    {

        Destroy(m);
     }
  else if (n > 4 && n <= 8)
    {
         Destroy(m);
     }
    else if (n > 8 && n <= 11)
    {
        Destroy(m);
    }
    else if (n > 11 && n <= 13)
    {
         Destroy(m);
    }
    else if (n==14)
    {
        Destroy(m);
     }
}

}

My Question is how to made some object undestroyable/unclikable in script.


Solution

  • By doing this . You all just need to do is tag the gameobject as DontDestroy And it's undestroyable

        object[] obj = GameObject.FindObjectsOfType(typeof (GameObject));
        foreach (object o in obj) {
            GameObject go = (GameObject) o;
    
            //if the GO is tagged with DontDestroy, ignore it. (Cameras, Managers, etc. which should survive loading)
            //these kind of GO's shouldn't have an ObjectIdentifier component!
            if(go.CompareTag("DontDestroy")) {
                Debug.Log("Keeping GameObject in the scene: " + go.name);
                continue;
    
            }
            Destroy(go);
        }
    

    Hope i helped