2016-11-18 13 views
0

Это может показаться инфантильным, но я просто не получаю его. Эта программа имеет различные кнопки, которые показывают или скрывают холст с соответствующей информацией, в данном случае сменой масла.Unity3d Уничтожьте любые объекты, которые существуют до instatsating

Когда кнопка нажата, она открывает холст замены масла, получает информацию из базы данных и отображает эту информацию из инстанцированного сборника. Это прекрасно работает. Проблема возникает, когда вы нажимаете ту же кнопку или другую кнопку и возвращаетесь к тому же холсту. Информация двойная, тройная или четверная, вы получаете идею. Он умножается каждый раз, когда вы возвращаетесь к нему.

Очевидно, что игровые объекты должны быть уничтожены до конкретизации, но:

  1. Я не уверен, что для проверки; это временная переменная, используемая для создания экземпляра или сборника? Я попытался определить его в начале скрипта, в любой другой момент, я получаю ошибку неназначенного использования.

  2. Я не уверен, что самое лучшее время для вызова функции. Я угадываю, как только вы нажмете кнопку.

    public void ShowAllOilChanges() 
    { 
        for(int i = 0; i< OilChangeList.Count; i++) 
         { 
          ocObj = Instantiate(OilChangePrefab); 
          OilChange tmpOilChange = OilChangeList[i]; 
          ocObj.GetComponent<OilChangeScript>().DisplayOilChanges("Date of Service: " +tmpOilChange.ServiceDate, "Place of Service: " +tmpOilChange.Location, "Mileage: " +tmpOilChange.Mileage, "Labor: " +tmpOilChange.Labor, "Oil Brand: " +tmpOilChange.OilBrand, "Oil Price: " +tmpOilChange.OilPrice, "Filter Brand: " +tmpOilChange.FilterBrand, "Filter Price: " +tmpOilChange.FilterPrice, "Purchase Place: " +tmpOilChange.OilFilterPurchaseLocation); 
          ocObj.transform.SetParent(OilDisplayparent); 
    
         } 
    } 
    
    public void DestroyOilChange() 
    { 
        Debug.Log("Before" +ocObj); 
    
        Destroy(ocObj); 
        Debug.Log("After" +ocObj); 
    } 
    
    public void OpenOilWindow() 
    { 
    
         if(windowOpen==false) 
         { 
          windowOpen=true; 
          OilCanvas.enabled=true; 
          BatteryCanvas.enabled=false; 
          BrakeCanvas.enabled=false; 
          TireCanvas.enabled=false; 
          PlugCanvas.enabled=false; 
          MufflerCanvas.enabled=false; 
          CustomCanvas.enabled=false; 
          DestroyOilChange(); 
    
         } 
         else if(windowOpen==true) 
         { 
          windowOpen=false; 
          OilCanvas.enabled=false; 
    
         } 
    } 
    

Если кто-то может ходить мне через, я ценю это.

+0

Слишком много недостающей информации, чтобы помочь. Я даже не могу указать, в каких файлах находятся эти методы, и кто их называет. Необходимо было бы показать больше полного потока (ИМО) для тех, кто может помочь. – TDWebDev

ответ

0

Я смотрел на это назад. Первое, что я сделал, это создать теги для различных типов объектов, которые нужно удалить. Затем я добавил их в соответствующие сборники. Эта функция вызывается при открытии холста (окна) и при его закрытии.

public void DestroyObjects(string tag) 
{ 
    GameObject[] Obj = GameObject.FindGameObjectsWithTag(tag); 
    if(Obj==null) 
     return; 
    else 
    { 
     Debug.Log(Obj.Length); 
     for(int i=0; i< Obj.Length; i++) 
     { 
      Destroy(Obj[i]); 
     } 
     Debug.Log(tag + "Objects Destroyed!"); 
    } 

} 

Надеюсь, что это помогает кому-то вроде меня.