2016-11-18 56 views
0

这可能看起来很幼稚,但我只是没有得到它。 这个程序有不同的按钮,显示或隐藏画布和相关信息,在这种情况下,换油。Unity3d摧毁任何存在之前存在的对象

当按下按钮时,它将打开换油画布,从数据库获取信息并显示来自实例化预制件的信息。这工作正常。当您单击相同的按钮或另一个按钮并返回到同一画布时,问题就出现了。信息是双倍或三倍或四倍,你明白了。每当你回到它时,它就会倍增。

显然,游戏对象必须实例化之前被销毁,而是:

  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

有太多的缺失信息来协助。我甚至不知道这些方法在哪些文件中,以及谁调用它们。必须展示更多完整的流程(IMO)供任何人协助。 – 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!"); 
    } 

} 

希望这可以帮助像我这样的人。

相关问题