2016-11-18 9 views
0

これは幼児のように見えるかもしれませんが、私はそれを得ていません。 このプログラムには、キャンバスを関連情報(この場合はオイルチェンジ)とともに表示または非表示する異なるボタンがあります。Unity3dインストール前に存在するオブジェクトを破棄します

ボタンを押すと、オイル交換キャンバスが開き、データベースから情報が取得され、インスタンス化されたプレハブの情報が表示されます。それはうまく動作します。この問題は、同じボタンまたは別のボタンをクリックして同じキャンバスに戻ったときに発生します。情報は2倍または3倍または4倍です。あなたはそれに戻るたびに倍増します。

もちろん、ゲームオブジェクトをインスタンス化する前に破壊されますが、する必要があります。

  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!"); 
    } 

} 

これは私のような人に役立ちます。

関連する問題