Unity3d销毁实例化之前存在的任何对象
本文关键字:存在 任何 对象 实例化 Unity3d | 更新日期: 2023-09-27 18:18:26
这可能看起来很幼稚,但我就是不明白。这个程序有不同的按钮,可以显示或隐藏带有相关信息的画布,在本例中是Oil Change。
当按钮被按下时,它打开换油画布,从数据库中获取信息,并从实例化的预制件中显示该信息。这很好。当您单击相同的按钮或另一个按钮并返回到相同的画布时,问题就出现了。信息是两倍,三倍,四倍,你懂的。每次你回到它,它都会加倍。
显然,游戏对象必须在实例化之前被销毁,但是:
-
我不知道该检查什么;它是用于实例化的临时变量还是预制件?我试过在脚本的顶部定义它,任何其他时间,我得到一个未分配使用的错误。
-
我不确定调用函数的最佳时间。我猜只要你按下按钮。
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; } }
如果有人能给我介绍一下,我会很感激的。
我是反过来看的。我做的第一件事是为需要删除的各种类型的对象创建标记。然后我将它们添加到各自的预制件中。这个函数在打开画布(窗口)和关闭画布(窗口)时调用。
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!");
}
}
希望这能帮助到像我这样的人。